5

EcmaScript 仕様によると、DontDelete 内部パラメーターが原因で、一部のオブジェクト プロパティを削除できません。例えば ​​:

var y = 5

削除可能であってはなりません。しかし、私が確認できたことから、そうです。

Mozilla Developer Center のリンクは次のとおりです: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete

これが正常に機能しない理由はありますか?

4

3 に答える 3

2

時々、読んだ内容を確認する必要があります。DontDeleteECMA 仕様 (262、ed 5) には内部パラメータはありません。多分 [ Configurable] プロパティが意味されていますか? delete演算子は変数や関数では機能せず、オブジェクト プロパティで機能します。

var y=5, 
    z = {y:5};
delete y;
delete z.y;
alert(y);   //=> 5
alert(z.y); //=> undefined

私の答えから、このSOの質問が浮かび上がり、TJ Crowderからの優れた答えです。

于 2011-05-13T07:11:02.773 に答える
1

ES5 表 17 によると:

CreateMutableBinding(N, D) 環境レコードに新しい可変バインディングを作成します。文字列値 N は、バインドされた名前のテキストです。オプションのブール引数 D が true の場合、バインディングは後で削除できます。

および 10.5 宣言バインディングのインスタンス化

  1. コード内の VariableDeclaration および VariableDeclarationNoIn d ごとに、ソース テキストの順に [...] を実行します。env の SetMutableBinding 具象メソッドを呼び出して、引数として dn、undefined、および strict を渡します。

つまり、宣言された変数は削除できないはずです。グローバル コードでは、グローバル オブジェクトは変数 obejct であるアクティベーション オブジェクトであるため、宣言されたグローバルは削除可能であってはなりません。もちろん、ブラウザはそれに準拠していない可能性があります...

于 2011-05-13T08:02:44.633 に答える
0
var y = 5
alert(delete (y));

falseを表示します。その後、削除できません。

于 2011-05-13T06:55:20.183 に答える