所有typeof返回值為“object” 的對象(如數(shù)組)都包含一個(gè)內(nèi)部屬性([[Class]])(我們可以把它看做一個(gè)內(nèi)部的分類,而非傳統(tǒng)的面相對象意義上的類)這個(gè)屬性無法直接訪問泣侮,一般通過Object.prototype.toString(...)來查看例如:
Object.prototype.toString.call([1,2,3]);
//"[object Array]"
Object.prototype.toString.call(/regex-literal/i);
//"[object RegExp]"
上例中數(shù)組的內(nèi)部[[Class]]的屬性值是“Array” 正則表達(dá)式的值是“RegExp” 多數(shù)情況下局雄,對象的內(nèi)部[[Class]] 屬性和創(chuàng)建該對象的內(nèi)建原生構(gòu)造函數(shù)相對應(yīng),但并非如此
那么基本類型呢一疯,來看下null和undefined
Object.prototype.toString.call(null);
//"[object Null]"
Object.prototype.toString.call(undefined)
//"[object undefined]"
雖然Null() 和undefined()這樣的原生構(gòu)造函數(shù)不存在撼玄,但是內(nèi)部的[[Class]]屬性值仍然是"Null"和“Undefined”
其他的基本類型值(如字符串。數(shù)字和布爾)的情況有所不同墩邀,通常稱為包裝
Object.prototype.toString.call('abc');
//"[object String]"
object.prototype.toString.call(42);
//"[object Number]"
object.prototype.toString.call(true);
//"[object Boolean]"
上面的基本類型值被各自的封裝對象自動包裝掌猛,所以他們的內(nèi)部[[Class]]屬性值分別為“String”."Number""Boolean"