splice
実際、配列のインデックスに関するものであり (配列の数値プロパティが呼び出されるため)、他のプロパティに関するものではありません。
オブジェクト (配列を含む) からプロパティを削除するには、次を使用しますdelete
。
delete theArray['0315778255cca8d2f773642ad1d3678f'];
他の言語の「削除」と似てdelete
いますが、JavaScript ではメモリ管理とは (直接) 関係ありません。undefined
オブジェクトからプロパティを削除するだけです (完全に; プロパティの値を何かに設定するだけではありません)。
補足:数値以外のプロパティのみを使用している場合は、おそらく配列はまったく必要ありません。JavaScript の型を使用する唯一の理由はArray
、名前がすべて数字であるプロパティ、魔法length
(数値プロパティのみに関連する)、およびからのものをArray.prototype
与える特別な処理が必要な場合です。インデックス プロパティ。
以下のコメントを再確認してください。
delete は要素の場所に undefined を残します。私はそれを完全に取り除く必要があります
いいえ、delete
プロパティを完全に削除します。その場に留まらないundefined
。存在しないオブジェクトからプロパティを取得しようとすると、undefined
. 例えば:
var obj = {}; // Object with no "foo" property at all
var x = obj.foo;
console.log("x = " + x); // "x = undefined"
hasOwnProperty
またはを使用して、プロパティが実際に削除されたことを証明できますin
。
var obj = {};
console.log('foo' in obj); // "false"
console.log(obj.hasOwnProperty('foo')); // "false"
in
オブジェクトとそのプロトタイプ チェーンをチェックします。hasOwnProperty
オブジェクト自体をチェックするだけです。
に戻るdelete
:
var obj = {};
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj.foo;
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj['foo'];
console.log(obj.hasOwnProperty('foo')); // "false"
実例| ソース
が有効な識別子である場合、delete obj.foo;
との両方が機能することに注意してください。ただし、名前が有効な識別子ではないプロパティ (md5 の合計など) については、上記で示したように、文字列と共に角かっこで囲まれた形式を使用する必要があります ( )。delete obj['foo'];
foo
delete theArray['0315778255cca8d2f773642ad1d3678f'];