(Object.prototype.toString.call(obj) === '[object Array]')有什么优点?

14 阅读1分钟

这个判断数组的方法(Object.prototype.toString.call(obj) === '[object Array]')有以下几个优点:

  1. 可靠性高

    • 这个方法利用了 JavaScript 内部的 [[Class]] 属性,是最可靠的类型检测方法之一
    • 即使在跨框架(iframe)或跨窗口的情况下也能正确工作
  2. 无法被篡改

    • instanceofArray.isArray() 相比,这个方法调用的是原始的 Object.prototype.toString 方法
    • 即使有人修改了 Array.prototypeObject.prototype,这个方法仍然可靠
  3. 兼容性好

    • 在所有 JavaScript 环境中都可用
    • Array.isArray() 是 ES5 才引入的方法,在老旧浏览器中可能不支持

不过在现代开发中,我们通常推荐使用更简洁的 Array.isArray() 方法,因为:

  • 代码更易读
  • 性能更好
  • 已经有很好的浏览器支持

示例对比:

// 传统方法
const isArray1 = Object.prototype.toString.call(obj) === '[object Array]';

// 现代方法(推荐)
const isArray2 = Array.isArray(obj);

除非你需要在非常特殊的环境或极端情况下判断数组类型,否则使用 Array.isArray() 是更好的选择。