例:varで宣言されたjavascript値を削除できないのはなぜですか?
x = "Hello";
delete x; // returns true, x is removed
var y = "Hello";
delete y; // returns false, y is not removed
が、私はこの問題が発生したどのように興味がないんだけど、私は言語は、この機能を持っている理由を知りたいです。
例:varで宣言されたjavascript値を削除できないのはなぜですか?
x = "Hello";
delete x; // returns true, x is removed
var y = "Hello";
delete y; // returns false, y is not removed
が、私はこの問題が発生したどのように興味がないんだけど、私は言語は、この機能を持っている理由を知りたいです。
厳密に言えば、最初のx
は変数ではなくグローバルオブジェクトのプロパティです。ブラウザでは、通常window
です(したがってx = "Hello"
はwindow.x = "Hello"
に等しい)。変数を削除するのにdelete
を使用することはできませんが、それを使用してオブジェクトのプロパティを削除することができます。これは最初の場合に行われます。
オブジェクトからプロパティを削除するのは、配列から要素を削除するようなものです – ProgrammerAtWork
ある意味では、はい。 – JJJ
間違いなく。 'delete'はオブジェクトからプロパティを削除します。 'var'キーワードはあなたの変数を現在のローカルコンテキストに結びつけ、' var'なしで宣言するとその変数をグローバルオブジェクト、つまり 'window'に暗黙的にアタッチします。しかし、 'var'が' window'(ルートコンテキスト)に付いている場合、 'delete'はまだ動作しません。 – Powerslave