基本類型和引用類型。
基本類型:Undefined,Null,Boolean,Number,String
引用類型:Object,Array,Date,RegExp等弦撩,說白了就是對(duì)象昨稼。节视。。
我們都知道假栓,引用類型有方法和屬性寻行,但是基本類型是木有的,但是你一定見過這樣的代碼
var str = 'hello'; //string 基本類型
var s2 = str.charAt(0);
alert(s2); // h
有三個(gè)比較特殊的存在就是:String Number Boolean匾荆,這三個(gè)基本類型都有自己對(duì)應(yīng)的包裝對(duì)象拌蜘。并且隨時(shí)等候召喚。包裝對(duì)象呢牙丽,其實(shí)就是對(duì)象简卧,有相應(yīng)的屬性和方法。至于這個(gè)過程是怎么發(fā)生呢剩岳,其實(shí)是在后臺(tái)偷偷發(fā)生的贞滨。
舉例:
//我們平常寫程序的過程:
var str = 'hello'; //string 基本類型
var s2 = str.charAt(0); //在執(zhí)行到這一句的時(shí)候 后臺(tái)會(huì)自動(dòng)完成以下動(dòng)作 :
(
var str = new String('hello'); // 1 找到對(duì)應(yīng)的包裝對(duì)象類型,然后通過包裝對(duì)象創(chuàng)建出一個(gè)和基本類型值相同的對(duì)象
var s2 = str.chaAt(0); // 2 然后這個(gè)對(duì)象就可以調(diào)用包裝對(duì)象下的方法拍棕,并且返回結(jié)給s2.
str = null; // 3 之后這個(gè)臨時(shí)創(chuàng)建的對(duì)象就被銷毀了晓铆, str =null;
)
alert(s2);//h
alert(str);//hello 注意這是一瞬間的動(dòng)作 實(shí)際上我們沒有改變字符串本身的值。就是做了下面的動(dòng)作.這也是為什么每個(gè)字符串具有的方法并沒有改變字符串本身的原因绰播。
由此我們可以知道骄噪,引用類型和基本包裝對(duì)象的區(qū)別在于:生存期
引用類型所創(chuàng)建的對(duì)象,在執(zhí)行的期間一直在內(nèi)存中蠢箩,而基本包裝對(duì)象只是存在了一瞬間链蕊。
所以我們無法直接給基本類型添加方法:
列:
var str = 'hello';
str.number = 10; //假設(shè)我們想給字符串添加一個(gè)屬性number ,后臺(tái)會(huì)有如下步驟
{
var str = new String('hello'); // 1 找到對(duì)應(yīng)的包裝對(duì)象類型谬泌,然后通過包裝對(duì)象創(chuàng)建出一個(gè)和基本類型值相同的對(duì)象
str.number = 10; // 2 通過這個(gè)對(duì)象調(diào)用包裝對(duì)象下的方法 但結(jié)果并沒有被任何東西保存
str =null; // 3 這個(gè)對(duì)象又被銷毀
}
alert(str.number); //undefined 當(dāng)執(zhí)行到這一句的時(shí)候滔韵,因?yàn)榛绢愋捅緛頉]有屬性,后臺(tái)又會(huì)重新重復(fù)上面的步驟
{
var str = new String('hello'); // 1 找到基本包裝對(duì)象掌实,然后又新開辟一個(gè)內(nèi)存陪蜻,創(chuàng)建一個(gè)值為hello對(duì)象
str.number = undefined // 2 因?yàn)榘b對(duì)象下面沒有number這個(gè)屬性,所以又會(huì)重新添加贱鼻,因?yàn)闆]有值宴卖,所以值是未定 ;然后彈出結(jié)果
str =null; // 3 這個(gè)對(duì)象又被銷毀
}
每個(gè)對(duì)象都有原型滋将。
舉例:
//給字符串添加方法 要寫到對(duì)應(yīng)的包裝對(duì)象的原型下才行
var str = 'hello';
String.prototype.last= fuction(){
return this.charAt(this.length);
};
str.last(); // 5 執(zhí)行到這一句,后臺(tái)依然會(huì)偷偷的干這些事
{
var str = new String('hello');// 找到基本包裝對(duì)象症昏,new一個(gè)和字符串值相同的對(duì)象随闽,
str.last(); // 通過這個(gè)對(duì)象找到了包裝對(duì)象下的方法并調(diào)用
str =null; // 這個(gè)對(duì)象被銷毀
}