js里判断变量是数组还是对象的四种方法

方法一:constructor

1
2
console.log(arr.constructor === Array)
console.log(obj.constructor === Array);

1570897037168

方法二:instanceof

1570897168419

方法三:Array.isArray()

1
2
3
4
5
var arr = []  
var obj = {}

Array.isArray(arr)//true
Array.isArray(obj)//false

方法四:Object.prototype.toString().call()

1570897447379

第1种和第2方法在跨域时会失效,当你在多个frame中来回穿梭的时候,由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的,因此导致上述检测代码失效。