判斷乙個物件是否是陣列?

2021-09-28 14:41:46 字數 1962 閱讀 4298

一、判斷乙個物件是否是陣列?

var obj1=

, obj2=[1

,2], obj3=

newdate()

;

1.判斷當前物件的原型物件是否是陣列的原型物件
//1.使用__proto__獲得物件的原型物件

obj1.__proto__==array.prototype;

//false

obj2.__proto__==array.prototype;

//true

obj3.__proto__==array.prototype;

//false

//2.因為__proto__可能被瀏覽器禁用,所以可用object.getprototypeof()

object.

getprototypeof

(obj1)

==array.prototype;

//false

object.

getprototypeof

(obj2)

==array.prototype;

//true

object.

getprototypeof

(obj3)

==array.prototype;

//false

//3.更直接的函式father.isprototypeof(child)

array.prototype.

isprototypeof

(obj1)

;//false

array.prototype.

isprototypeof

(obj2)

;//true

array.prototype.

isprototypeof

(obj3)

;//false

2.判斷當前物件的建構函式是否是array
//1.判斷原型物件中的constructor屬性(物件自己沒有,會去原型物件上查詢)

obj1.constructor==array;

//false

obj2.constructor==array;

//true

obj3.constructor==array;

//false

//2.用instanceof方法判斷物件是否是array的示例

obj1 instanceof array

;//false

obj2 instanceof array

;//false

obj3 instanceof array

;//false

但是上面這些方法有侷限性,如果手動修改了物件的原型物件,那麼這些方法就判斷不了了

3.使用object原型物件中的tostring()方法

//但是陣列和日期物件的原型物件中有自己的tostring方法,所以要用call方法

object.prototype.tostring.

call

(obj1)

;//[object object]

object.prototype.tostring.

call

(obj2)

;//[object array]

object.prototype.tostring.

call

(obj3)

;//[object date]

4.使用es5的isarray方法
array.

isarray

(obj1)

;//false

array.

isarray

(obj2)

;//true

array.

isarray

(obj3)

;//false

判斷乙個物件是否是陣列

用typeof方法返回的陣列型別是object,無法確定是否是陣列,但可以通過下面方法判斷。var is array function value 說明 首先判斷這個值是否有值,並且不是undifined或null的值 其次判斷這個值的typeof運算的結果是否是object 第三判斷這個值的len...

判斷乙個物件是否為陣列

方法一 使用instanceof操作符。instanceof操作符用來判斷要檢測物件的原型鏈上是否存在某個建構函式的prototype屬性。var a var b console.log a instanceof object true console.log b instanceof object...

陣列的理解 並且 如何判斷乙個物件是否是陣列

這個問題看似簡單,實際上不簡單。var arr 1,2,3 這裡是字面量方法建立乙個陣列,相當於 var arr new array array是建構函式 類,arr.proto array.prototype,像push 方法,其實是array.prototype.push 所以說arr例項隨想能...