javascript - 为什么js认为我的数组在某些环境下不是数组?

标签 javascript

我正在 JVM 浏览器中运行一些 Javascript。我已经声明了一个原型(prototype)方法来帮助我插入非常大的数组

Array.prototype.extend = function (other_array) {
    if (other_array === Array)
        other_array.forEach(function (v) { this.push(v) }, this);
    else
        console.log("not an array");
}

调用时的工作方式是:

arrayA.extend(arrayB);

我知道我正在扩展数组。在一个环境中,一切都很好。在不同的环境中,该方法认为 arrayB 不是数组,这是错误的。

有什么线索吗?

编辑:阵列检查实际上在两种环境中都失败了。我的问题是在更新我的 JDK 后消失的 forEach 循环中抛出的 JDK 相关错误

最佳答案

if(other_array === Array) 几乎永远不会 工作,除非您传递的实际上是 window.Array 构造函数,例如:

arrayA.extend(Array); // this will fulfill the `if`, but it will then throw an error
// because the Array constructor has no forEach method

数组实例永远不会满足=== Array

但是您可以改用 Array.isArray,这是一种可靠的跨环境检查方法是否为数组:

Array.prototype.extend = function (other_array) {
    if(Array.isArray(other_array)) {
        other_array.forEach(function(v) {this.push(v)}, this);
    } else {
        console.log("not an array");
    }
}

关于javascript - 为什么js认为我的数组在某些环境下不是数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59605334/

相关文章:

javascript - 为 React TypeScript 中的 ...props 中的 onClick 属性添加类型

javascript - 将整个样式字符串设置为来自 javascript 的元素(不是单个样式参数)

javascript - 传入一个 observableArray 作为函数参数

javascript - 您可以从单个 Nodejs 模块中导出多个类吗?

javascript - 单个 JavaScript 点击事件中的多个 ID

javascript - 同时触发的多个 ajax 调用无法正常工作

javascript - DOM 事件总是单线程运行吗?

javascript - 使用行号捕获控制台

javascript - 将 contextMenu 附加到 float 图形点

javascript - 增量运算符和 document.write 函数的工作原理