除對(duì)象之外,JavaScript有5個(gè)原始值類型:布爾值、數(shù)字、字符串、null和undefined。同時(shí)標(biāo)準(zhǔn)庫(kù)提供了構(gòu)造函數(shù)來(lái)封裝布爾值、數(shù)字和字符串作為對(duì)象。你可以創(chuàng)建一個(gè)String對(duì)象,String對(duì)象是真正的對(duì)象。
var s = new String("hello");
s + " world"; // hello world
s[4]; // "o"
typeof "hello"; // "string"
typeof s; // "Object"
由于每個(gè)String對(duì)象都是一個(gè)獨(dú)立的對(duì)象,其總是只等于自身。
var s1 = new String("hello");
var s2 = new String("hello");
s1 == s2; // false
s1 === s2; // false
當(dāng)對(duì)原始值提取屬性和進(jìn)行方法調(diào)用時(shí),它表現(xiàn)得就像已經(jīng)使用了對(duì)應(yīng)的對(duì)象封裝了該值一樣。
"hello".toUpperCase(); // "HELLO"
你可以對(duì)原始值設(shè)置屬性,但是對(duì)其絲毫沒(méi)有影響。
"hello".someProperty = 17;
"hello".somProperty; // undefined
每次隱式封裝都會(huì)產(chǎn)生一個(gè)新的String對(duì)象,更新第一個(gè)封裝對(duì)象并不會(huì)造成持久的影響。對(duì)原始值設(shè)置屬性是沒(méi)有意義的。
提示
- 當(dāng)做相等比較時(shí),原始類型的封裝對(duì)象與其原始值行為不一樣。
- 獲取和設(shè)置原始類型值的屬性會(huì)隱式地創(chuàng)建封裝對(duì)象。