Firefox中`map`的奇怪javascript行为

时间:2012-05-26 10:35:37

标签: javascript

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

在web-app的错误情况下(当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

  使用三个参数调用

回调:元素的值,   元素的索引和遍历的Array对象。

由于应用程序强制firefox进入某种模式,会出现意外行为吗?

(我正在使用Firefox 12.0)

2 个答案:

答案 0 :(得分: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]功能,则会用其他内容覆盖该功能。

答案 1 :(得分:3)

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