如何在 JavaScript 中判断一个值是否为数组?

  • 使用数组自带 Array.prototype.isArray() 方法来检查值是否为数组。
const str = 'abc'
const arr = [1, 2, 3]

console.log(arr.isArray(arr)) // true
  • 如果环境不支持 Array.prototype.isArray() 方法,则可以使用 polyfill 实现,使用 Object.prototype.toString.call(arr) 进行类型判断。
// 旧浏览器
function isArray(value){ 
    return Object.prototype.toString.call(value) === '[object Array]'
}

// 旧浏览器兼容
if (!Array.isArray) {
  Array.isArray = function (value) {
    return Object.prototype.toString.call(value) === '[object Array]'
  }
}

isArray(arr) // true
isArray(str) // false
  • 使用 instanceof 检验构造函数的 prototype 属性是否出现在对象的原型链中,返回一个布尔值。
arr instanceof Array // true
  • 使用 constructor 判断该变量的构造函数是否为 Array
arr.constructor === Array // true
  • 使用一些提供好的函数库,如 Lodash 的 _.isArray 方法检查 value 是否归类为 Array 对象。
console.log(_.isArray(arr)) // true
console.log(_.isArray(str)) // false

我们一般会组合前两种方法实现一个完美的 isArray:

const isArray = Array.isArray || (list => ({}).toString.call(list) === '[object Array]')

npm 上就有一个 isarray 包使用这种方式。

注意

  • typeof 检测出的数组为 object
  • 使用 instanceofconstructor 检测是否为数组在一定程度上是便利、好用的,但是也存在着一些问题。主要是在判断上,可能会存在多个全局环境的问题(iframe)这种情况不多见,详细可以网上查查。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容