2012-05-26 87 views
2

以下是Firefox中map函数的一些奇怪的javascript行为。Firefox中`map`的奇怪javascript行为

在一个Web应用内的错误状态(当萤火上的错误暂停)键入以下到萤火虫控制台:

["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 Console中输入相同的语句,则会产生以下预期结果:

["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

回调调用与三个参数:元素的值,将 的元素的索引,并且该阵列对象正被遍历。

是由于应用程序强迫Firefox进入某种模式而出现意外的行为?

(我使用的是Firefox 12.0)

+0

http://jsfiddle.net/6WRqp/ --- FF12,无法复制 – zerkms

回答

3

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

+0

是的......发生了。在错误情况下键入'[] .map'表示'function()',而在良好状态下,'[] .map'表示'map()'。 –

+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"] 

火狐12.听起来像是你有一个创建自己的Array.prototype.map一些JS库。

可以轻松地检查这个使用Firebug:

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

如果你没有得到[native code]功能要覆盖别的东西的功能。

+0

'Array.prototype.map.toString()'显示覆盖地图方法的函数。我只是包括一个外部库,那是什么造成的。谢谢! –