JS分兩種數(shù)據(jù)類型:zhufeng666
-
基本數(shù)據(jù)類型 7 種:
Number、String氏堤、Boolean档插、Null隧出、 Undefined、Symbol(ES6)阀捅,這些類型可以直接操作保存在變量中的實(shí)際值胀瞪。
-
引用數(shù)據(jù)類型 6 種:
Object(Object 類型、Array 類型饲鄙、Date 類型凄诞、RegExp 類型、Function 類型忍级、error 等)
判斷數(shù)據(jù)類型的四種通用方式
-
typeof xxx 用來(lái)檢測(cè)xxx的基礎(chǔ)數(shù)據(jù)類型帆谍,有六種結(jié)果:
"number","string","boolean","undefined","function","object"
-
xxx instanceof yyy 檢測(cè)某個(gè)實(shí)例xxx是否屬于某個(gè)類yyy(js內(nèi)置的幾個(gè)對(duì)象類,包裝類String,Number,Bolean除外)(在其原型鏈上)轴咱,
1 instanceof Number ====>false
new Number(1) instanceof Number ====>true
-
原型鏈繼承
function Fn(){定義實(shí)例的私有屬性}
Fn.prototype = 父類;(如 [])
var f = new Fn() // f此時(shí)為一個(gè)對(duì)象汛蝙,f就會(huì)有自己的私有屬性,還有父類的屬性
則有 : f.__proto__ --->Fn.prototype(即arr) --->Array.prototype --> Object.prototype
-
xxx.constructor 檢測(cè)xxx的構(gòu)造函數(shù),可以檢測(cè)基本數(shù)據(jù)類型 ,只找最近的一層朴肺,找到后就不再向上找了窖剑;找不到再向上找;如果原型中的constructor被重寫了戈稿,就會(huì)檢測(cè)錯(cuò)誤
/^s/.constructor === RegExp ===>true
/^s/.constructor === Object ===>false
-
Object.prototype.toString.call(xxx)
返回 "[object xxx的類型]" 西土,是最準(zhǔn)確最常用的方式,對(duì)基礎(chǔ)類型和引用類型都有效鞍盗,不受原型改變的影響
Object.prototype.toString.call([ ]) === "[object Array]"; // true
數(shù)組的單獨(dú)判斷
-
Array.isArray(obj) (ES 5.1推出的需了,不支持IE6~8)
Array.isArray([]); // true
Array.isArray([1]); // true
Array.isArray(new Array());
// 鮮為人知的事實(shí):其實(shí) Array.prototype 也是一個(gè)數(shù)組跳昼。
Array.isArray(Array.prototype);
// 下面的函數(shù)調(diào)用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray({ __proto__: Array.prototype });
======================================================================
附記
-
number 的 toString :
不帶參數(shù),將number 轉(zhuǎn)為 string 肋乍,(128).toString() ----> '128'
帶參數(shù)鹅颊,轉(zhuǎn)為進(jìn)制的數(shù)后再轉(zhuǎn)為字符串 ,(128).toString(8) ---> '156725', 將128轉(zhuǎn)為8進(jìn)制
對(duì)于Number墓造,RegExp堪伍,String,Date滔岳,F(xiàn)unction,Array的tiString()都是僅僅將當(dāng)前數(shù)據(jù)類型轉(zhuǎn)為字符串杠娱;
對(duì)于Math(使用的是Object原型上的toString),Object的toString()會(huì)得到當(dāng)前數(shù)據(jù)的類型 ----> "[object 類型]"
-
DOM原型鏈 :
div.proto --->HTMLDivElement.prototype --> HTMLElement.prototype --> Element.prototype --> Node.proototype --> EventTarget.prototype --> Object.prototype
null 和undefined 所屬的類分別是 Null 和 Undefined,但是瀏覽器將這兩個(gè)類保護(hù)起來(lái),不允許訪問(wèn)谱煤,訪問(wèn)就報(bào)錯(cuò)