1. 構文
削除後の式は、
var o = {a:1} //this のように属性への参照を指定する必要があります。ここで、o.a はオブジェクト o の属性 a への参照です
別の属性名は with ステートメントでのみ使用できます
with(o){
delete a;
}
2. delete の値
delete は通常の演算子で、true または false を返します。ルールは、削除されたオブジェクトの属性が存在し、削除できない場合は false を返し、それ以外の場合は true を返します。 ここでの特徴は、object 属性が存在しない場合でも true が返されるため、戻り値は削除の成否と完全には一致しません。
var o = {a:1};
delete o.a; //return true
var b = 2;
delete b;//return false、ECMA ルール規則: var と function を使用して宣言された変数は削除できません
3. 削除が許可されない状況
上記の例で説明した var および function で宣言された変数は削除できませんが、暗黙の宣言は削除できます
function c(){return 12;}
delete c ;//return false
d = function(){return 12;}
delete d;//return true
プロトタイプ チェーンから継承したプロパティは削除できませんが、削除することはできます。プロトタイプ チェーンのプロパティを削除します
function Foo( ){}
Foo.prototype .bar = 42;
var foo = new Foo();
delete foo.bar // true を返しますが、効果はありません
alert(foo.bar; ); // アラート 42、属性は継承されます
delete Foo.prototype.bar // プロトタイプの属性 bar を削除します
alert(foo.bar); // アラートは「未定義」です
4. 特殊なケース
eval で実行されるコード内に var や function で宣言された変数がある場合は、それらを削除できます
eval("var a=1"); 🎜>delete a;
alert(a); //未定義エラーを報告します
eval 実行コードのクロージャ内で宣言が行われている場合、変数は削除できません
eval(" (function(){var a=1;delete a ; return a;})()");//1
5. 配列要素の削除
配列要素を削除します。配列は配列の長さに影響しません
var arr = ['yuyin','suhuan','baby' ];
delete arr[0]
alert(arr.length);//alert 3
削除されたキー値は配列に属していませんが、引き続きアクセスでき、その値は未定義です。
var arr = ['yuyin',' suhuan', 'baby'];
arr[0] を削除します; // false
alert(arr[0]); //未定義
arr[0] == = unknown; //true
未定義にキー値を直接代入して比較
削除操作では、配列の key value 属性は、それ自体がオブジェクトでもあります。この状況は理解しやすいです。キー値を保持する必要がある場合は、未定義の割り当てを使用できます。