这是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)
答案 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] }
,那么几乎可以肯定就是这种情况。