怎么判斷一個變量是不是數(shù)組呢心傀?由于數(shù)組也是對象脂男,用typeof方法,輸出的是Object种呐,所以typeof肯定不能判斷一個變量是否為數(shù)組了宰翅,今天主要記錄其他集中判斷變量是不是數(shù)組的方法。
- 1爽室、typeof arr.pop
如果arr是數(shù)組的話汁讼,返回的是function,因?yàn)閿?shù)組arr是由Array構(gòu)造函數(shù)構(gòu)造來的阔墩,因此數(shù)組arr的原型鏈上能找到pop/push函數(shù)嘿架,如果是的話就是數(shù)組。
當(dāng)然這種方式也由缺點(diǎn)啸箫,如果這個變量自定義了pop/push函數(shù)的話耸彪,這句話也返回function,所以這個方法還是由缺陷的忘苛。 - 2蝉娜、 instanceof
L instanceof R,熟悉原型鏈的同學(xué)應(yīng)該知道instanceof的原理扎唾,即在L的原型鏈上尋找召川,如果找到一個對象正好等于R的原型,即返回true胸遇,代表著荧呐,L是由R構(gòu)造出來的。
L.__proto__.__proto__...=R.prototype
所以arr instanceof Array 返回true即可判斷arr是數(shù)組纸镊。
- 3倍阐、原型鏈方法
這種方法其實(shí)和第二種方法類似。
arr.__proto__.constructor==Array
如果返回true就是數(shù)組薄腻。
23方法的局限性:
instanceof 和constructor判斷的變量收捣,必須在當(dāng)前頁面聲明的,比如庵楷,一個頁面中有一個子頁面,子頁面中聲明了一個arr并將其賦值給父頁面,在父頁面應(yīng)用23方法都是不可以的尽纽。
原因:
1咐蚯、array屬于引用類型困食,在數(shù)據(jù)傳遞過程中猴誊,僅僅是引用地址的傳遞洋幻。
2序愚、每個頁面的Array原生對象所引用的地址是不一樣的围橡,在子頁面中聲明的arr老赤,所對應(yīng)的構(gòu)造函數(shù)是子頁面的Array對象臼膏,父頁面來判斷并不等于子頁面的Array
- 4仿畸、通用的方法
Object.prototype.toString.call(arr)=='[object Array]'
這個返回true的話就是數(shù)組啦~