今天來討論一下js中的基本包裝物件(也叫基本包裝型別),之前剛學到這裡的時候,自己也是一頭霧水,不明白這個基本包裝物件到底是個什麼鬼,後來找了很多資料,終於看清了它的真面目。首先呢,我們現在複習一下js的資料型別,js資料型別被分為了兩大門派,基本型別和引用型別。
基本型別:`undefined`,`null`,`boolean`,`number`,`string`
引用型別:`object`,`array`,`date`,`regexp`等,說白了就是物件。。。
我們都知道,引用型別有方法和屬性,但是基本型別是木有的,但是你一定見過這樣的**
var str = 'hello'; //string 基本型別
var s2 = str.charat(0);
alert(s2); // h
毫無疑問上面的string
是乙個基本型別,但是它卻能召喚出乙個charat()
的方法,這是什麼原因呢?
主要是因為在基本型別中,有三個比較特殊的存在就是:string
number
boolean
,這三個基本型別都有自己對應的包裝物件。並且隨時等候召喚。包裝物件呢,其實就是物件,有相應的屬性和方法。至於這個過程是怎麼發生呢,其實是在後台偷偷發生的。
來看個栗子
//我們平常寫程式的過程:
var str = 'hello'; //string 基本型別
var s2 = str.charat(0); //在執行到這一句的時候 後台會自動完成以下動作 :
//相當於:
( var str = new string('hello'); // 1 找到對應的包裝物件型別,然後通過包裝物件建立出乙個和基本型別值相同的物件
var s2 = str.chaat(0); // 2 然後這個物件就可以呼叫包裝物件下的方法,並且返回結給s2.
str = null; // 3 之後這個臨時建立的物件就被銷毀了, str =null;
) `alert(s2);//h
alert(str);//hello 注意這是一瞬間的動作 實際上我們沒有改變字串本身的值。就是做了下面的動作.這也是為什麼每個字串具有的方法並沒有改變字串本身的原因。
由此我們可以知道,引用型別和基本包裝物件的區別在於:生存期
引用型別所建立的物件,在執行的期間一直在記憶體中,而基本包裝物件只是存在了一瞬間。
所以我們無法直接給基本型別新增方法:
舉個栗子
var str = 'hello';
str.number = 10; //假設我們想給字串新增乙個屬性number ,後台會有如下步驟
// 相當於
{ var str = new string('hello'); // 1 找到對應的包裝物件型別,然後通過包裝物件建立出乙個和基本型別值相同的物件
str.number = 10; // 2 通過這個物件呼叫包裝物件下的方法 但結果並沒有被任何東西儲存
str =null; // 3 這個物件又被銷毀
}alert(str.number); //undefined 當執行到這一句的時候,因為基本型別本來沒有屬性,後台又會重新重複上面的步驟
//相當於
{ var str = new string('hello'); // 1 找到基本包裝物件,然後又新開闢乙個記憶體,建立乙個值為hello物件
str.number = undefined // 2 因為包裝物件下面沒有number這個屬性,所以又會重新新增,因為沒有值,所以值是未定 ;然後彈出結果
str =null; // 3 這個物件又被銷毀
}
那麼我們怎麼才能給基本型別新增方法或者屬性呢?
答案是在基本包裝物件的原型下面新增,每個物件都有原型。
來看個栗子
//給字串新增方法 要寫到對應的包裝物件的原型下才行
var str = 'hello';
string.prototype.last= fuction();
str.last(); // 5 執行到這一句,後台依然會偷偷的幹這些事
//相當於
{ var str = new string('hello');// 找到基本包裝物件,new乙個和字串值相同的物件,
str.last(); // 通過這個物件找到了包裝物件下的方法並呼叫
str =null; // 這個物件被銷毀
}
看注釋相信能看出建立在基本包裝物件原型下面的方法和屬性才能被儲存。 輕鬆理解JS基本包裝物件
今天來討論一下js中的基本包裝物件 也叫基本包裝型別 之前剛學到這裡的時候,自己也是一頭霧水,不明白這個基本包裝物件到底是個什麼鬼,後來找了很多資料,終於看清了它的真面目。首先呢,我們現在複習一下js的資料型別,js資料型別被分為了兩大門派,基本型別和引用型別。基本型別 undefined null...
輕鬆理解JS基本包裝物件
今天來討論一下js中的基本包裝物件 也叫基本包裝型別 之前剛學到這裡的時候,自己也是一頭霧水,不明白這個基本包裝物件到底是個什麼鬼,後來找了很多資料,終於看清了它的真面目。首先呢,我們現在複習一下js的資料型別,js資料型別被分為了兩大門派,基本型別和引用型別。基本型別 undefined null...
JS包裝物件
js中有三個基本資料型別是比較特殊的存在,分別是string number boolear,這個三個基本是由自己對應的包裝物件。並且隨時等候召喚,包裝物件 其實就是物件,有相應的屬性和方法,至於這個過程怎麼發生的呢?其是在後台偷偷發生的。區別 引用型別和基本包裝物件的區別在於,生存期,引用型別所建立...