爲了便於操做基本類型值,ECMAScript 提供了3 個特殊的引用類型:Boolean、Number
和String。這些類型與其餘引用類型類似,但同時也具備與各自的基本類型相應的特殊行爲。
實際上,每當讀取一個基本類型值的時候,後臺就會建立一個對應的基本包裝類型的對象,
從而可以調用一些方法來操做這些數據。html
一.基本包裝類型概述正則表達式
- var box = 'Mr. Lee'; //定義一個字符串
- var box2 = box.substring(2); //截掉字符串前兩位
- alert(box2); //輸出新字符串 . Lee
- alert(box); //未改變 說明box2爲副本
變量box 是一個字符串類型,而box.substring(2)又說明它是一個對象(PS:只有對象才
會調用方法),最後把處理結果賦值給box2。'Mr. Lee'是一個字符串類型的值,按道理它不
應該是對象,不該該會有本身的方法,好比:數組
- alert('Mr. Lee'.substring(2)); //直接經過值來調用方法
- //1.字面量寫法:
- var box = 'Mr. Lee'; //字面量 在執行時後臺瞬間建立了基本包裝對象 執行完這行是馬上釋放 box=null
- box.name = 'Lee'; //無效屬性
- box.age = function () { //無效方法
- return 100;
- };
- alert(box); //Mr. Lee
- alert(box.substring(2)); //. Lee
- alert(typeof box); //string
- alert(box.name); //undefined
- alert(box.age()); //錯誤
- //2.new 運算符寫法:
- var box = new String('Mr. Lee'); //new 運算符
- box.name = 'Lee'; //有效屬性
- box.age = function () { //有效方法
- return 100;
- };
- alert(box); //Mr. Lee
- alert(box.substring(2)); //. Lee
- alert(typeof box); //object
- alert(box.name); //Lee
- alert(box.age()); //100
以上字面量聲明和new 運算符聲明很好的展現了他們之間的區別。但有必定仍是能夠
確定的,那就是無論字面量形式仍是new 運算符形式,均可以使用它的內置方法。而且
Boolean 和Number 特性與String 相同,三種類型能夠成爲基本包裝類型。
PS:在使用new 運算符建立以上三種類型的對象時,能夠給本身添加屬性和方法,但
咱們建議不要這樣使用,由於這樣會致使根本分不清究竟是基本類型值仍是引用類型值。瀏覽器
二.Boolean類型
Boolean 類型沒有特定的屬性或者方法。app
布爾表達式的全部對象都會轉換爲true,所以falseObject對象在布爾表達式中表明的是true。
- var falseObject = new Boolean(false);
- var result = falseObject && true;
- alert(result); //true
- var falseValue = false;
- result = falseValue && true;
- alert(result); //false
- alert(typeof falseObject); //object
- alert(typeof falseValue); //boolean
- alert(falseObject instanceof Boolean); //true
- alert(falseValue instanceof Boolean); //false
三.Number類型
Number 類型有一些靜態屬性(直接經過Number 調用的屬性,而無須new 運算符)和方
法。ide
- var box = 1000.789;
- alert(box.toString()); //轉換爲字符串,傳參能夠轉換進制
- alert(box.toLocaleString()); //本地形式,1,000.789
- alert(box.toFixed(2)); //小數點保留,1000.78
- alert(box.toExponential()); //指數形式,傳參會保留小數點
- alert(box.toPrecision(3)); //指數或點形式,傳參保留小數點
- var numberObject = new Number(10);
- var numberValue = 99;
- //toString() using a radix N進制
- alert(numberObject.toString()); //"10"
- alert(numberObject.toString(2)); //"1010"
- alert(numberObject.toString(8)); //"12"
- alert(numberObject.toString(10)); //"10"
- alert(numberObject.toString(16)); //"a"
- //toFixed()
- alert(numberObject.toFixed(2)); //outputs "10.00"
- numberObject = new Number(99);
- alert(numberObject.toPrecision(1)); //"1e+2"
- alert(numberObject.toPrecision(2)); //"99"
- alert(numberObject.toPrecision(3)); //"99.0"
- alert(typeof numberObject); //object
- alert(typeof numberValue); //number
- alert(numberObject instanceof Number); //true
- alert(numberValue instanceof Number); //false
四.String類型
String 類型包含了三個屬性和大量的可用內置方法。spa
String 也包含對象的通用方法,好比valueOf()、toLocaleString()和toString()方法,但這
些方法都返回字符串的基本值。3d
PS:box[1]在IE 瀏覽器會顯示undefined,因此使用時要慎重。
- var box = 'Mr.Lee';
- alert(box.charAt(1)); //r
- alert(box.charCodeAt(1)); //114
- alert(box[1]); //r,經過數組方式截取
PS:IE 的JavaScript 實如今處理向substr()方法傳遞負值的狀況下存在問題,它會返回
- var box = 'Mr.Lee';
- alert(box.concat(' is ', ' Teacher ', '!')); //Mr.Lee is Teacher ! 通常使用「+」連接
- alert(box.slice(3)); //Lee
- alert(box.slice(3,5)); //Le
- alert(box.substring(3)); //Lee
- alert(box.substring(3,5)); //Le
- alert(box.substr(3)); //Lee
- alert(box.substr(3,5)); //Lee
- var box = 'Mr.Lee';
- alert(box.slice(-3)); //Lee,6+(-3)=3 位開始
- alert(box.substring(-3)); //Mr.Lee 負數返回所有
- alert(box.substr(-3)); //Lee,6+(-3)=3 位開始
- var box = 'Mr.Lee';
- alert(box.slice(3, -1)); //Le 6+(-1)=5, (3,5)
- alert(box.substring(3, -1)); //Mr. 第二參爲負,直接轉0,
- //而且方法會把較小的數字提早,(0,3)
- alert(box.substr(3, -1)); //'' 第二參數爲負,直接轉0 ,(3,0)
原始字符串,使用時要切記。
PS:若是沒有找到想要的字符串,則返回-1。
- var box = 'Mr.Lee is Lee';
- alert(box.indexOf('L')); //3
- alert(box.indexOf('L', 5)); //10
- alert(box.lastIndexOf('L')); //10
- alert(box.lastIndexOf('L', 5)); //3,從指定的位置向前搜索
- //示例:找出所有的L
- var box = 'Mr.Lee is Lee'; //包含兩個L 的字符串
- var boxarr = []; //存放L 位置的數組
- var pos = box.indexOf('L'); //先獲取第一個L 的位置
- while (pos > -1) { //若是位置大於-1,說明還存在L
- boxarr.push(pos); //添加到數組
- pos = box.indexOf('L', pos + 1); //重新賦值pos 目前的位置
- }
- alert(boxarr); //輸出
PS:只有幾種語言(如土耳其語)具備地方特有的大小寫本地性,通常來講,是否本
- var box = 'Mr.Lee is Lee';
- alert(box.toLowerCase()); //所有小寫
- alert(box.toUpperCase()); //所有大寫
- alert(box.toLocaleLowerCase()); //
- alert(box.toLocaleUpperCase()); //
地化效果都是一致的。
正則表達式在字符串中的應用,在前面的章節已經詳細探討過,這裏就再也不贅述了。
以上中match()、replace()、serach()、split()在普通字符串中也可使用。htm
- var box = 'Mr.Lee is Lee';
- alert(box.match('L')); //找到L,返回L 不然返回null
- alert(box.search('L')); //找到L 的位置,和indexOf 類型
- alert(box.replace('L', 'Q')); //把L 替換成Q
- alert(box.split(' ')); //以空格分割成字符串
- alert(String.fromCharCode(76)); //L,輸出Ascii 碼對應值
localeCompare(str1,str2)方法詳解:比較兩個字符串並返回如下值中的一個;
1.若是字符串在字母表中應該排在字符串參數以前,則返回一個負數。(多數-1)
2.若是字符串等於字符串參數,則返回0。
3.若是字符串在自附表中應該排在字符串參數以後,則返回一個正數。(多數1)對象
- var box = 'Lee';
- alert(box.localeCompare('apple')); //1
- alert(box.localeCompare('Lee')); //0
- alert(box.localeCompare('zoo')); //-1
以上是經過JS 生成一個html 標籤,根據經驗,沒什麼太大用處,作個瞭解。
- var box = 'Lee'; //
- alert(box.link('連接地址')); //超連接