2

map这是Firefox中该函数的一些奇怪的 javascript 行为。

在 web 应用程序的错误情况下(当 firebug 暂停错误时)在 Firebug 控制台中键入以下内容:

["a", "b", "c", "d"].map(function(val, i, arr) {
    return val + " " + i + " " + typeof arr;
});

产生以下意外结果:

["a undefined undefined",
"b undefined undefined", 
"c undefined undefined", 
"d undefined undefined"]

那时,如果我打开另一个空白选项卡并在空白选项卡的 Firebug 控制台中键入相同的语句,它会产生以下预期结果:

["a 0 object", 
"b 1 object", 
"c 2 object", 
"d 3 object"]

这意味着,在错误条件下,map使用 1 个参数而不是预期的 3 个参数调用回调。

来自 MDN 的引用:(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

callback 使用三个参数调用:元素的值、元素的索引和被遍历的 Array 对象。

是因为应用程序强制 Firefox 进入某种模式而导致的意外行为吗?

(我使用的是 Firefox 12.0)

4

2 回答 2

3
>>> ["a", "b", "c", "d"].map(function(val, i, arr) { return val + " " + i + " " + typeof arr; });
["a 0 object", "b 1 object", "c 2 object", "d 3 object"]

Firefox 12。听起来您有一些 JS 库,可以创建自己的Array.prototype.map.

您可以使用 firebug 轻松检查:

>>> Array.prototype.map.toString()
"function map() { [native code] }"

如果您没有获得该[native code]功能,则您正在用其他东西覆盖该功能。

于 2012-05-26T10:39:00.513 回答
3

听起来您的应用程序中的一些其他代码可能正在覆盖 Array.prototype.map 函数——也许是一个未完全实现的 polyfill?如果您[].map在控制台中输入,并且没有显示,function map() { [native code] }那么几乎可以肯定是这种情况。

于 2012-05-26T10:39:59.300 回答