6

次のスニペットを検討してください (フィドルはこちら):

​var a;

​a = 1;
console.log(delete a​); // prints 'false'

​b = 1;
console.log(delete b);​ // prints 'true'​​​​

deleteグローバル変数aとでキーワードの動作が異なるのはなぜbですか?

4

4 に答える 4

4

MDN ドキュメントから:

delete 演算子は、オブジェクトからプロパティを削除します。

グローバル変数 ( なしvar) は、グローバル オブジェクト (通常はwindow) のプロパティであるため、削除できます。

Avarはグローバル変数ではありませんが、グローバル オブジェクトのプロパティではなく、外部スコープのローカル変数であるため、delete削除しません。それらのドキュメントから:

x = 42;     // creates the property x on the global object
var y = 43; // declares a new variable, y

delete x;   // returns true  (x is a property of the global object and can be deleted)
delete y;   // returns false (delete doesn't affect variable names)
于 2012-09-14T23:32:36.353 に答える
3

MDN によると、delete はプロパティが存在し、削除できない場合にのみ false を返します。それ以外の場合は true を返します。削除後、実際の値をテストしてみてください。a削除されていないことがわかります。これは、MDN ページにあるように、delete変数名には影響しないためです。

変数名や関数名には影響しません。

(つまり、グローバル オブジェクトで定義されvar、グローバル オブジェクトからではありません)

次のページの例を見てみましょう。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete

于 2012-09-14T23:32:49.807 に答える
2

var に関する mozilla docsから:

違いは、宣言された変数はグローバル オブジェクトの構成不可能なプロパティであり、宣言されていない変数は構成可能であることです。

var a;--> を使用しているため、これは宣言された変数であるため、var構成できません。

a = 6;--> を使用していないため、これは宣言されていない変数であり、var構成可能です。

上記の両方の構文aは、グローバル オブジェクトのプロパティとして添付された名前の var で終了し (window通常)、プロパティには次の属性があります。

  • 書き込み可能。false の場合、プロパティの値は変更できません。
  • 設定可能。false の場合、プロパティを削除したり、その属性 (書き込み可能、​​構成可能、または列挙可能) を変更しようとすると失敗します。
  • 列挙可能。true の場合、ユーザーが for (var prop in obj){} (または同様のもの) を実行すると、プロパティが反復処理されます。

これはecmascript5 オブジェクトとプロパティから抽出されたものであり、お読みのとおりconfigurable、問題の変数の属性は、変数を削除できるかどうかに影響します。

于 2012-09-14T23:56:37.250 に答える
0

「var a」は、現在のブロックの外のどこからでもアクセスできないことを意味します。したがって、それを削除することはUNDECLARE (未定義と同じではない) を意味するため、同じブロックに「var a」を再度書き込むことができます (エラー)。

許可される用途 (MDN):

delete object.property 
delete object['property'] 
delete object[index] 
delete property

これは、リソースを手動でクリーンアップする必要がある GOTO や非構造化プログラミングのようなもので、C の ~Destructor のようなものです (同じではありません)。~a(); のようにオブジェクトを削除できます。ただし、「int i」のように「変数を 'UNDECLARE'」することはできません。

于 2012-09-27T13:07:38.637 に答える