2

mapFirefoxでの関数の奇妙な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 Consoleに入力すると、次のような期待される結果が得られます。

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

これは、エラー状態でmap、予想される3つの引数ではなく1つの引数を使用してコールバックを呼び出すことを意味します。

MDNからの引用:(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

コールバックは、要素の値、要素のインデックス、およびトラバースされるArrayオブジェクトの3つの引数で呼び出されます。

アプリが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"]

Firefox12.独自のを作成する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関数を上書きしているようです-不完全に実装されたポリフィル、おそらく?コンソールに入力[].mapし、それが表示されない場合function map() { [native code] }、これはほぼ確実に当てはまります。

于 2012-05-26T10:39:59.300 に答える