2017-09-11 5 views

答えて

2

いいえ、後者は同じことをしません。値をundefinedに設定するだけで、そのインデックスは削除されません。

deleteはインデックスを削除しますが、長さは更新されないため、実際には定義されていないインデックスになり、値undefinedだけではありません。
つまり、長さが項目の数よりも多い「疎」配列です。

あなたは、彼らが価値undefinedを反復処理するように、ほとんどの配列方法で簡単にこれをテストではなく、定義されていないインデックスを超えることができ(違いがあります)

var arr = [0, 1, 2, 3]; 
 

 
delete arr[1]; // delete the second index 
 

 
arr.forEach(function(item) { 
 
    console.log(item); // 0, 2, 3 
 
}); 
 

 
console.log('--------') 
 

 
var arr2 = [0, 1, 2, 3]; 
 

 
arr2[1] = undefined; // set the second index to "undefined" 
 

 
arr2.forEach(function(item) { 
 
    console.log(item); // 0, undefined, 2, 3 
 
});

1

いいえ、彼らは同じことをしません。 MDN's delete operator articleから:

あなたは配列の要素を削除すると、配列要素

を削除、配列の長さは影響を受けません。これは、配列の最後の要素を削除しても保持されます。

演算子delete10が配列要素を削除すると、その要素は配列に含まれなくなります。次の例ではdeletetrees[3]が削除されています。あなたが存在するが、undefined値を持つ配列要素をしたい場合は

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; 
delete trees[3]; 
if (3 in trees) { 
    // this does not get executed 
} 

は、代わりにdeleteオペレータの未定義の値を使用します。次の例では、trees[3]値は不定割り当てられているが、配列要素がまだ存在する:

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; 
trees[3] = undefined; 
if (3 in trees) { 
    // this gets executed 
} 
0

を高密度アレイが疎かにすることができ、両方のいずれかを使用して。彼らの使い方は異なります。

見てみましょう

...

var arr = [1,2,3]; 
delete arr[10]; // <- returns true but arr is not sparse 
delete arr[1]; // <- returns true and arr is now sparse 

var arr = [1,2,3]; 
arr[1] = undefined; // <- arr is not sparse 
arr[10] = undefined; // <- arr is now sparse 
関連する問題