
一、Null 和 Undefined的區(qū)別
Null 表示“無”的對象,轉換為數(shù)值時為0
典型用法:
a、作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象;
b、作為對象原型鏈的終點。
Undefined表示一個“無”的原始值,轉換為數(shù)值時為NaN
典型用法:
a、變量被聲明,但未賦值;
b、調用函數(shù)時,應該提供的參數(shù)沒有提供,該參數(shù)=undefined;
c、對象沒有賦值的屬性,該屬性的值=undefined;
d、函數(shù)沒有返回值,默認返回undefined。
二、Boolean
只有兩個值:true 和 false;
轉換函數(shù) Boolean() : JS 所有類型的值都有與這兩個Boolean值等價的值,具體的轉換關系見下表:

三、檢測類型
基本數(shù)據類型:
typeof操作符是確定一個變量是字符串、數(shù)值、布爾值,還是udefined的最佳工具。如果變量的值是一個對象或null,則typeof操作符會返回“object”。
引用類型:
instanceof操作符
語法:result = variable instanceof constructor
alert(person instanceof Object);//變量person是Object嗎?
如果變量是給定引用類型的實例,instanceof操作符就會返回true。(所有引用類型
的值都是Object的實例)
四、垃圾收集
JavaScript具有自動垃圾收集機制,執(zhí)行環(huán)境會負責管理代碼執(zhí)行過程中使用的內存。
1、標記清除(最常用的垃圾收集方式)
當變量進入環(huán)境時,就將這個變量標記為“進入環(huán)境”;當變量離開環(huán)境時,則將其標記為“離開環(huán)境”。從邏輯上講,永遠不能釋放進入環(huán)境的變量所占用的內存。
2、引用計數(shù)(不太常見)——跟蹤記錄每個值被引用的次數(shù)。
當某個值的引用次數(shù)變成0時,就可以將其占用的內存空間收回來。
存在一個嚴重的問題:循環(huán)引用
3、性能問題
在IE中,調用window.CollectGarbage()方法會立即執(zhí)行垃圾收集;
在Opera 7 及更高版本中,調用window.opera.collect()方法也會啟動垃圾收集歷
程。
4、管理內存
分配給Web瀏覽器的可用內存數(shù)量通常要比分配給桌面應用程序的少,防止運行JavaScript的網頁耗盡全部系統(tǒng)內存而導致系統(tǒng)崩潰;內存分配問題不僅會影響給變量分配內存,同時還會影響調用棧以及在一個線程中能夠同時執(zhí)行的語句數(shù)量。
優(yōu)化內存的最佳方式——解除引用(執(zhí)行的代碼只保存必要的數(shù)據,一旦數(shù)據不再有用,最好通過將其值設置為null來釋放其引用)。這一做法適用于大多數(shù)全局變量和全局對象的屬性,局部變量會在它們離開執(zhí)行環(huán)境時自動解除引用。
解除引用的真正作用——讓值脫離執(zhí)行環(huán)境,以便垃圾收集器下次運行時將其收回。