1

これにより、番号 1、2、および 3 のアラートが表示されます。

[1,2,3].forEach(alert);

これは私にエラーを与えます:

$.extend(true, {}, [1,2,3]).forEach(alert);

エラー:

TypeError: Object #<Object> has no method 'forEach'

なぜこのようなことが起こるのでしょうか? また、複製されたオブジェクトをループするにはどうすればよいでしょうか?

4

4 に答える 4

5

呼び出し.extend()は、配列ではなくプレーンオブジェクトを作成しています。(つまり、実際には「ディープクローン配列」を作成しているわけではありません。).forEachプレーンオブジェクトのようなイテレータはありません。

于 2012-10-25T20:57:08.933 に答える
2

その理由は単純で、配列[]にはforEachメソッドがあり、オブジェクトにはメソッド{}がないからです。

オブジェクトの配列がある場合は、配列をforEach介して行うことができます。
1 つのプロパティが配列であるオブジェクトがある場合、 のforEachように配列を使用できますobj.arr.forEach
それぞれがオブジェクトを持ち、プロパティとして配列を持つ配列の配列がある場合forEach、外側の配列をforEach介して、次に内側の配列のオブジェクトを介して、配列を保持するオブジェクトのプロパティにアクセスする関数を設定できます、そしてそれforEachを通して。

{}.forEachただし、バニラ JS は使用できません。

于 2012-10-25T21:00:53.560 に答える
0

必要なメソッドは.each()だと思います

気にしないでください、私はあなたの質問を読み間違えました...

于 2012-10-25T20:56:25.813 に答える