Javascript メソッドに関するこの記事を読んでいて、次のdelete
コードを試しました。
function f(){
var x = "abcd";
console.log(delete x); //returns false, because x has DontDelete attribute
y = "abcd";
console.log(delete y); //returns true, but I didn't explicitly assign y as a property
}
これは奇妙です。なぜなら、(: のように) に対してプロパティの割り当てを使用していy
ないwindow.y="abcd";
からです。delete
属性がy
ないのはなぜですか?DontDelete
アップデート:
以下の回答では、オブジェクトのプロパティであるという理由だけで y が削除可能であると主張されていwindow
ます。そうではありません。次のスニペットを検討してください。
function f() {
var functionx = "abcd";
console.log(delete functionx); //returns false, because x has DontDelete attribute
functiony = "abcd";
console.log(delete functiony); //returns true, but I didn't explicitly assign functiony as a property to the window
}
//take 1
var globalx = "abcd";
console.log(this.globalx);//to prove x is a property of the global
console.log(delete globalx);//fails, even though x is a property of the window
//take 2
this.globaly = "abcd";
console.log(this.globaly);//to prove y is a property of the global
console.log(delete globaly);//succeeds, because I used property assignment
f();
テイク 1 ではglobalx
、ウィンドウのプロパティですが、まだ削除できません。成功するかどうかの基準delete
は、変数が何かのプロパティであるかどうか (常に true である) ではなく、そのプロパティにDontDelete
属性が設定されているかどうかです。