84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
問題の説明が包括的ではありません
私の問題は、配列が次のように定義されている場合です:
ここで自動的に生成された未定義と私が定義したものに違いはありますか?
組み込みのトラバーサルを使用すると、それらをトラバースできないのはなぜですか?
认证0级讲师
定義したものはスパース配列 (スパース配列、配列の長さが配列要素の数より大きい) であるため、 in を使用してその配列要素が存在するかどうかを検出できます。 リーリー
in
は元のインデックスが存在する要素のみを走査しますforEach.
forEach
ここで自動生成された未定義と私が定義したものに違いはありますか?
これは配列の罠であり、この未定義は未定義ではありません。自動的に生成されたスロットは「空のスロット」と呼ばれ、Chrome では単に未定義として表示されます。また、実際の未定義が 1 つずつ出力され、空のスロットには「未定義 × 7」という単語が出力されることがわかります。
forEach、マップなどは空のスロットをスキップします。解決策を参考にしてください
forEach はこのように書かれているため、組み込みの forEach は unknown に遭遇しても継続しますスキップしないバージョンを自分で書くことができます
この問題を別の角度から考えることもできます: var a = [1,2,3,4]delete a[0]console.log(a)//[未定義 × 1, 2, 3, 4] a.length//4a.forEach(it=>console.log(it))// 2 3 4質問に戻りますが、forEach がカプセル化されると、この「未定義」はスキップされ、書き換えることができますこの方法を試してみてください。値が何であっても、正常に印刷できるはずです
定義したものはスパース配列 (スパース配列、配列の長さが配列要素の数より大きい) であるため、
そしてin
を使用してその配列要素が存在するかどうかを検出できます。 リーリーは元のインデックスが存在する要素のみを走査します
forEach
.これは配列の罠であり、この未定義は未定義ではありません。自動的に生成されたスロットは「空のスロット」と呼ばれ、Chrome では単に未定義として表示されます。また、実際の未定義が 1 つずつ出力され、空のスロットには「未定義 × 7」という単語が出力されることがわかります。
forEach、マップなどは空のスロットをスキップします。解決策を参考にしてください
リーリーforEach はこのように書かれているため、組み込みの forEach は unknown に遭遇しても継続します
スキップしないバージョンを自分で書くことができます
この問題を別の角度から考えることもできます:
var a = [1,2,3,4]
delete a[0]
console.log(a)//[未定義 × 1, 2, 3, 4]
a.length//4
a.forEach(it=>console.log(it))// 2 3 4
質問に戻りますが、forEach がカプセル化されると、この「未定義」はスキップされ、書き換えることができますこの方法を試してみてください。値が何であっても、正常に印刷できるはずです