【发布时间】:2020-05-28 20:42:06
【问题描述】:
我在 MDN 上通过 Array.isArray 的 polyfill 方法,这是我发现的:
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
虽然这可行,但我想知道为什么 MDN 没有将以下内容列为 isArray 的 polyfill?
if (!Array.isArray) {
Array.isArray = function(arg) {
return arg.constructor === Array;
};
}
上面的代码有点短和简单。我想知道使用MDN的实现与上面的相比有什么优势吗?
【问题讨论】:
-
如果您从 iframe 中获取对象,例如,它将是 一个 数组,但不会从 您的当前 @987654328 创建@构造函数,这样检查就会失败。
-
@VLAZ:不太明白。为什么 iFrame 中的对象/数组应该有所不同?你能用代码证明你想说什么吗?
-
它是一个数组,但来自不同的环境。构造函数是
Array的不同实例。正如我们所知,function() {} === function() {}是错误的。 -
instanceof Array与您建议的== Array非常兼容。出现了同样的问题 - 它无法跨环境,因为您将尝试比较Array的不同实例。 This answer直接谈问题。
标签: javascript