ECMAScript 變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值?;绢愋椭抵傅氖呛唵蔚臄?shù)據(jù)段,而引用類型值指那些可能由多個值構(gòu)成的對象。基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number 和 String。這 5 種基本數(shù)據(jù)類型是按值訪問的,因為可以操作保存在變量中的實際的值。引用類型的值是保存在內(nèi)存中的對象。與其他語言不同,JavaScript 不允許直接訪問內(nèi)存中的位置,也就是說不能直接操作對象的內(nèi)存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。為此,引用類型的值是按引用訪問的。
??如果從一個變量向另一個變量復(fù)制基本類型的值,會在變量對象上創(chuàng)建一個新值,然后把該值復(fù)制到為新變量分配的位置上,即兩個變量是不同的。當(dāng)從一個變量向另一個變量復(fù)制引用類型的值時,同樣也會將存儲在變量對象中的值復(fù)制一份放到為新變量分配的空間中。不同的是,這個值的副本實際上是一個指針,而這個指針指向存儲在堆中的一個對象。復(fù)制操作結(jié)束后,兩個變量實際上將引用同一個對象。因此,改變其中一個變量,就會影響另一個變量。
??ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。也就是說,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個變量復(fù)制到另一個變量一樣。(而不是通過引用傳遞的)
檢測基本數(shù)據(jù)類型——typeof
檢測引用類型的值(檢測是什么類型的對象)——instanceof
語法:result = variable instanceof constructor。返回true or false。
使用 typeof 操作符檢測函數(shù)時,該操作符會返回"function"。ECMA-262 規(guī)定任何在內(nèi)部實現(xiàn)[[Call]]方法的對象都應(yīng)該在應(yīng)用 typeof 操作符時返回"function"。由于上述瀏覽器中的正則表達式也實現(xiàn)了這個方法,因此對正則表達式應(yīng)用 typeof 會返回"function"。在IE 和 Firefox 中,對正則表達式應(yīng)用 typeof 會返回"object"。
??JS沒用塊級作用域但是有函數(shù)作用域。
??JavaScript 具有自動垃圾收集機制,也就是說,執(zhí)行環(huán)境會負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。兩種方法來實現(xiàn):1.標(biāo)記清除 2.引用計數(shù)。