js基礎-12-判斷陣列和判斷物件的方法

笑道三千發表於2020-10-10

一,判斷陣列的方法

首先需要明確的是typeof在判斷[],{},null時返回的都是 object,所以是無法判斷陣列和物件的。
1,常用的方法是:instanceof

表示式:A instanceof B
返回值:如果B函式的顯示原型物件(prototype)在A物件的原型鏈(__proto__)上,返回true,否則false
var arr=[1,2,3]
var b={}
console.log(arr instanceof Array)  //true
console.log(b instanceof Object)   //true
console.log(arr instanceof Object)  //true  因為arr的原型鏈必然包含Object的原型物件,或者說所有物件都是Object的例項

//於是又可以引申出另一種寫法:
console.log(arr.__proto__.constructor === Array )
console.log(arr.__proto__=== Array.prototype )

所以說,它可以用來判斷是不是陣列,而判斷不了是不是物件。
但是如果存在多個全域性執行環境,就會存在多個不同版本的Array建構函式了,這種辦法就會失效,使用下一種:
2,Array.isArray(arr)
不管arr是在哪個全域性環境定義的,一旦是陣列則返回true,否則false.

Array.isArray([]) // true
Array.isArray({}) // false

二,判斷是否物件的方法

1、toString(推薦)

Object.prototype.toString.call(obj) === '[object Object]'
//Object原型物件上的toString方法是可以判斷型別的。利用call把指標指向obj,也就是呼叫這個toString方法來判斷obj

2、constructor

obj.constructor === Object

相關文章