什么是找出对象是否是数组的最佳方法

Neb*_*Fox 12 javascript

据我所知,有三种方法可以找出对象是否是一个数组

isArray功能实施

Array.isArray()
Run Code Online (Sandbox Code Playgroud)

通过 toString

Object.prototype.toString.apply( obj ) === "[object Array]"
Run Code Online (Sandbox Code Playgroud)

并通过 instanceof

obj instanceof Array
Run Code Online (Sandbox Code Playgroud)

有没有理由选择一个而不是另一个?

Arn*_*anc 6

最好的方法是使用标准Array.isArray(),如果它是由引擎实现的:

isArray = Array.isArray(myObject)
Run Code Online (Sandbox Code Playgroud)

MDN建议toString()Array.isArray未实现时使用该方法:

兼容性

在任何其他代码之前运行以下代码将创建Array.isArray(如果它本身不可用).这依赖于Object.prototype.toString不变,并调用解析为本机Function.prototype.call方法.

if(!Array.isArray) {  
  Array.isArray = function (arg) {  
    return Object.prototype.toString.call(arg) == '[object Array]';  
  };  
}
Run Code Online (Sandbox Code Playgroud)

jQuery和underscore.js [source]都采用了这种toString() === "[object Array]"方式.