一者祖、Null 和 Undefined的區(qū)別
Null 表示“無(wú)”的對(duì)象立莉,轉(zhuǎn)換為數(shù)值時(shí)為0
典型用法:
a、作為函數(shù)的參數(shù)七问,表示該函數(shù)的參數(shù)不是對(duì)象蜓耻;
b、作為對(duì)象原型鏈的終點(diǎn)械巡。
Undefined表示一個(gè)“無(wú)”的原始值刹淌,轉(zhuǎn)換為數(shù)值時(shí)為NaN
典型用法:
a、變量被聲明讥耗,但未賦值有勾;
b、調(diào)用函數(shù)時(shí)葛账,應(yīng)該提供的參數(shù)沒(méi)有提供柠衅,該參數(shù)=undefined;
c籍琳、對(duì)象沒(méi)有賦值的屬性菲宴,該屬性的值=undefined;
d趋急、函數(shù)沒(méi)有返回值喝峦,默認(rèn)返回undefined。
二呜达、Boolean
只有兩個(gè)值:true 和 false谣蠢;
轉(zhuǎn)換函數(shù) Boolean() : JS 所有類型的值都有與這兩個(gè)Boolean值等價(jià)的值,具體的轉(zhuǎn)換關(guān)系見(jiàn)下表:
三、檢測(cè)類型
基本數(shù)據(jù)類型:
typeof操作符是確定一個(gè)變量是字符串眉踱、數(shù)值挤忙、布爾值,還是udefined的最佳工具谈喳。如果變量的值是一個(gè)對(duì)象或null册烈,則typeof操作符會(huì)返回“object”。
引用類型:
instanceof操作符
語(yǔ)法:result = variable instanceof constructor
alert(person instanceof Object);//變量person是Object嗎婿禽?
如果變量是給定引用類型的實(shí)例赏僧,instanceof操作符就會(huì)返回true。(所有引用類型
的值都是Object的實(shí)例)
四扭倾、垃圾收集
JavaScript具有自動(dòng)垃圾收集機(jī)制淀零,執(zhí)行環(huán)境會(huì)負(fù)責(zé)管理代碼執(zhí)行過(guò)程中使用的內(nèi)存。
1膛壹、標(biāo)記清除(最常用的垃圾收集方式)
當(dāng)變量進(jìn)入環(huán)境時(shí)驾中,就將這個(gè)變量標(biāo)記為“進(jìn)入環(huán)境”;當(dāng)變量離開(kāi)環(huán)境時(shí)恢筝,則將其標(biāo)記為“離開(kāi)環(huán)境”哀卫。從邏輯上講,永遠(yuǎn)不能釋放進(jìn)入環(huán)境的變量所占用的內(nèi)存撬槽。
2、引用計(jì)數(shù)(不太常見(jiàn))——跟蹤記錄每個(gè)值被引用的次數(shù)趾撵。
當(dāng)某個(gè)值的引用次數(shù)變成0時(shí)侄柔,就可以將其占用的內(nèi)存空間收回來(lái)。
存在一個(gè)嚴(yán)重的問(wèn)題:循環(huán)引用
3占调、性能問(wèn)題
在IE中暂题,調(diào)用window.CollectGarbage()方法會(huì)立即執(zhí)行垃圾收集;
在Opera 7 及更高版本中究珊,調(diào)用window.opera.collect()方法也會(huì)啟動(dòng)垃圾收集歷
程薪者。
4、管理內(nèi)存
分配給Web瀏覽器的可用內(nèi)存數(shù)量通常要比分配給桌面應(yīng)用程序的少剿涮,防止運(yùn)行JavaScript的網(wǎng)頁(yè)耗盡全部系統(tǒng)內(nèi)存而導(dǎo)致系統(tǒng)崩潰言津;內(nèi)存分配問(wèn)題不僅會(huì)影響給變量分配內(nèi)存,同時(shí)還會(huì)影響調(diào)用棧以及在一個(gè)線程中能夠同時(shí)執(zhí)行的語(yǔ)句數(shù)量取试。
優(yōu)化內(nèi)存的最佳方式——解除引用(執(zhí)行的代碼只保存必要的數(shù)據(jù)悬槽,一旦數(shù)據(jù)不再有用,最好通過(guò)將其值設(shè)置為null來(lái)釋放其引用)瞬浓。這一做法適用于大多數(shù)全局變量和全局對(duì)象的屬性初婆,局部變量會(huì)在它們離開(kāi)執(zhí)行環(huán)境時(shí)自動(dòng)解除引用。
解除引用的真正作用——讓值脫離執(zhí)行環(huán)境,以便垃圾收集器下次運(yùn)行時(shí)將其收回磅叛。