オペレーターはdelete
、オブジェクトからプロパティを削除します。プロパティをに設定するとwindow
、削除できます。
window.myProp = 10;
delete window.myProp;
演算子の状態の動作に関して私が頻繁に他の人に言及する記事のように、これdelete
はプロパティの割り当てが属性を設定しないためDontDelete
です(変数の宣言とは対照的です)。
その記事には、次のことも記載されています(強調が追加されました)。
属性が決定されるのはプロパティの作成中であることに注意してください(つまり、何も設定されません)。後の割り当てでは、既存のプロパティの属性は変更されません。この違いを理解することが重要です。
それを念頭に置いて、なぜwindowの既存のプロパティをオーバーライドし、alert
それを削除して元の値に戻すことができるのでしょうか。明らかな何かが欠けていますか?delete
演算子を使用することはめったにないので、そうなる可能性があります。
例えば:
window.alert = function() {};
alert("Hi!"); //Nothing happens
delete window.alert;
alert("Hello?"); //Alerts 'Hello?'
これは、それを実証するためのフィドルです(Chomeでのみテストされており、IEがこのように動作しないことは確かですが、現在Chrome以外にはアクセスできません)。