包裝對象正則表達式
所謂「包裝對象」,就是分別與數值、字符串、布爾值相對應的Number
、String
、Boolean
三個原生對象
數組
這三個原生對象能夠把原始類型的值變成(包裝成)對象app
var v1 = new Number(123); var v2 = new String('abc'); var v3 = new Boolean(true); typeof v1 // "object" typeof v2 // "object" typeof v3 // "object" v1 === 123 // false v2 === 'abc' // false v3 === true // false
Object
對象繼承的方法:valueOf
和toString
new Number(123).valueOf(); // 123 new String('abc').valueOf(); // "abc" new Boolean(true).valueOf(); // true new Number(123).toString(); // "123" new String('abc').toString(); // "abc" new Boolean(true).toString(); // "true"
'abc'.length // 3 // abc是一個字符串,自己不是對象,不能調用length屬性。 // JavaScript 引擎自動將其轉爲包裝對象,在這個對象上調用length屬性。 // 調用結束後,這個臨時對象就會被銷燬。 //這就叫原始類型與實例對象的自動轉換
String.prototype
上定義
// 好比,咱們能夠新增一個double方法,使得字符串和數字翻倍 String.prototype.double = function () { return this.valueOf() + this.valueOf(); }; 'abc'.double(); // abcabc Number.prototype.double = function () { return this.valueOf() + this.valueOf(); }; (123).double(); // 246 1外面必需要加上圓括號,不然後面的點運算符()會被解釋成小數點23.
Boolean 對象函數
false
對應的包裝對象實例,布爾運算結果也是true
var b = new Boolean(true); typeof b; // "object" b.valueOf(); // true if (new Boolean(false)) { console.log('true'); // true } if (new Boolean(false).valueOf()) { console.log('true'); // 無輸出 }
Boolean(undefined); // false Boolean(null); // false Boolean(0); // false Boolean(''); // false Boolean(NaN); // false Boolean(1); // true Boolean('false'); // true Boolean([]); // true Boolean({}); // true Boolean(function () {}); // true Boolean(/foo/); // true // 上面幾種 true 的狀況,都值得認真記住
!
)也能夠將任意值轉爲對應的布爾值
!!undefined // false !!null // false !!0 // false !!'' // false !!NaN // false !!1 // true !!'false' // true !![] // true !!{} // true !!function(){} // true !!/foo/ // true
Number 對象工具
是數值對應的包裝對象,能夠做爲構造函數使用,也能夠做爲工具函數使用ui
var n = new Number(1); typeof n // "object" Number(true); // 1
Number
對象部署的本身的toString
方法,用來將一個數值轉爲字符串形式// 10必定要放在括號裏,這樣代表後面的點表示調用對象屬性。 // 若是不加括號,這個點會被 JavaScript 引擎解釋成小數點,從而報錯 (10).toString(); // "10" (10).toString(2); // "1010" (10).toString(8); // "12" (10).toString(16); // "a"
toString
方法
10['toString'](2); // "1010"
(10).toFixed(2); // "10.00" (10.005).toFixed(2); // "10.01" 11.11111.toFixed(2); // "11.11"
參數爲小數位數,有效範圍爲0到20,超出這個範圍將拋出 RangeError 錯誤this
(10).toExponential(); // "1e+1" (10).toExponential(1); // "1.0e+1" (10).toExponential(2); // "1.00e+1" (1234).toExponential(); // "1.234e+3" (1234).toExponential(1); // "1.2e+3" (1234).toExponential(2); // "1.23e+3"
小數點後有效數字的位數,範圍爲0到20,超出這個範圍,會拋出一個 RangeError 錯誤編碼
(12.34).toPrecision(1); // "1e+1" (12.34).toPrecision(2); // "12" (12.34).toPrecision(3); // "12.3" (12.34).toPrecision(4); // "12.34" (12.34).toPrecision(5); // "12.340"
有效數字的位數,範圍是1到21,超出這個範圍會拋出 RangeError 錯誤spa
(12.35).toPrecision(3); // "12.3" (12.25).toPrecision(3); // "12.3" (12.15).toPrecision(3); // "12.2" (12.45).toPrecision(3); // "12.4"
Number.prototype
對象上面能夠自定義方法,被Number
的實例繼承。Number
的實例對象Number.prototype.add = function (x) { return this + x; }; Number.prototype.subtract = function (x) { return this - x; }; 8['add'](2); // 10 (8).add(2).subtract(4); // 6
// 在Number對象的原型上部署了iterate方法,將一個數值自動遍歷建立一個數組 Number.prototype.iterate = function () { var result = []; for (var i = 0; i <= this; i++) { result.push(i); } return result; // 返回建立的數組 }; (8).iterate() // [0, 1, 2, 3, 4, 5, 6, 7, 8]
String 對象prototype
var s1 = 'abc'; var s2 = new String('abc'); typeof s1; // "string" typeof s2; // "object" s2.valueOf(); // "abc"
new String('abc'); // String {0: "a", 1: "b", 2: "c", length: 3} (new String('abc'))[1]; // "b" 有數值鍵(0
、1
、2
)和length
屬性,因此能夠像數組那樣取值012length
字符串對象是一個相似數組的對象(很像數組,但不是數組)
String
對象還能夠看成工具方法使用,將任意類型的值轉爲字符串0xFFFF
的字符,即傳入的參數不能大於0xFFFF
(即十進制的 65535 )0x20BB7
大於0xFFFF
,致使返回結果出錯。。。注意:是結果出錯,而不是報錯0xFFFF
的字符佔用四個字節,而 JavaScript 默認支持兩個字節的字符。這種狀況下,必須把0x20BB7
拆成兩個字符表示
String.fromCharCode(0xD842, 0xDFB7); // "𠮷" //上面代碼中,0x20BB7拆成兩個字符0xD842和0xDFB7 // (即兩個兩字節字符,合成一個四字節字符),就能獲得正確的結果。 // 碼點大於0xFFFF的字符的四字節表示法,由 UTF-16 編碼方法決定
'abc'.length; // 3
0
開始編號的位置charAt
返回空字符串
var s = new String('abc'); s.charAt(1); // "b" s.charAt(s.length - 1); // "c" 'abc'.charAt(1); // "b" 'abc'[1]; // "b" 'abc'.charAt(-1); // "" 'abc'.charAt(3); // ""
charCodeAt
方法返回字符串指定位置的 Unicode 碼點(十進制表示),至關於String.fromCharCode()
的逆操做charCodeAt
返回首字符的 Unicode 碼點。charCodeAt
方法返回的 Unicode 碼點不會大於65536(0xFFFF),也就是說,只返回兩個字節的字符的碼點。
'abc'.charCodeAt(1); // 98 'abc'.charCodeAt(); // 97 'abc'.charCodeAt(-1); // NaN 'abc'.charCodeAt(4); // NaN
charCodeAt
,不只讀入charCodeAt(i)
,還要讀入charCodeAt(i+1)
,將兩個值放在一塊兒,才能獲得準確的字符concat
方法會將其先轉爲字符串,而後再鏈接
var s1 = 'abc'; var s2 = 'def'; s1.concat(s2); // "abcdef" s1 // "abc" 'a'.concat('b', 'c'); // "abc" var one = 1; var two = 2; var three = '3'; ''.concat(one, two, three); // "123" one + two + three // "33"
slice
方法返回一個空字符串'JavaScript'.slice(0, 4); // "Java" 'JavaScript'.slice(4); // "Script" 'JavaScript'.slice(-6); // "Script" 'JavaScript'.slice(0, -6); // "Java" 'JavaScript'.slice(-2, -1); // "p" 'JavaScript'.slice(2, 1); // ""
substring
方法會自動更換兩個參數的位置substring
方法會自動將負數轉爲0'JavaScript'.substring(0, 4); // "Java" 'JavaScript'.substring(4); // "Script" 'JavaScript'.substring(10, 4); // "Script" // 等同於 'JavaScript'.substring(4, 10); // "Script" 'Javascript'.substring(-3); // "JavaScript" 'JavaScript'.substring(4, -3); // "Java"
'JavaScript'.substr(4, 6); // "Script" 'JavaScript'.substr(4); // "Script" 'JavaScript'.substr(-6); // "Script" 'JavaScript'.substr(4, -1); // ""
-1
,就表示不匹配lastIndexOf
從尾部開始匹配\t
、\v
)、換行符(\n
)和回車符(\r
)
' hello world '.trim(); // "hello world" '\r\nabc \t'.trim(); // 'abc'
'Hello World'.toLowerCase(); // "hello world" 'Hello World'.toUpperCase(); // "HELLO WORLD"
null
null
match
方法還可使用正則表達式做爲參數
'cat, bat, sat, fat'.match('at'); // ["at"] 'cat, bat, sat, fat'.match('xt'); // null var matches = 'cat, bat, sat, fat'.match('at'); matches.index; // 1 matches.input; // "cat, bat, sat, fat"
match
,可是返回值爲匹配的第一個位置。若是沒有找到匹配,則返回-1
'cat, bat, sat, fat'.search('at'); // 1
g
修飾符的正則表達式)
'aaa'.replace('a', 'b'); // "baa"
'a|b|c'.split('|'); // ["a", "b", "c"] 'abc'.split(''); // ["a", "b", "c"] 'abc'.split(); // ["abc"] 'a c'.split(''); // ['a', '', 'c'] ' bc'.split(''); // ["", "b", "c"] 'ab '.split(''); // ["a", "b", ""] 'abc'.split('', 0); // [] 'abc'.split('', 1); // ["a"] 'abc'.split('', 2); // ["a", "b"] 'abc'.split('', 3); // ["a", "b", "c"] 'abc'.split('', 4); // ["a", "b", "c"]
B
的碼點是66,而a
的碼點是97'ä'.localeCompare('z', 'de'); // -1 'ä'.localeCompare('z', 'sv'); // 1
'B' > 'a' // false B的碼點是66,而a的碼點是97 'B'.localeCompare('a'); // 1 考慮到語言規則 b 大於 a 'apple'.localeCompare('banana'); // -1 'apple'.localeCompare('apple'); // 0