JavaScript_javascript の奇妙な削除演算子に関するヒント

WBOY
リリース: 2016-05-16 16:09:56
オリジナル
1112 人が閲覧しました

delete 演算子は JavaScript ではあまり一般的には使用されませんが、その特性は確かに非常に奇妙です。

1、オブジェクトの属性を削除します。コード:

コードをコピーします コードは次のとおりです:

var o = {
a: 1、
b: 2
};
o.a を削除;
アラート(o.a); //未定義

では、delete はオブジェクトの属性を削除するのでしょうか、それともオブジェクトの属性値を削除するのでしょうか? 結果は未定義でエラーは報告されなかったので、削除されたものが値であるべきだと考え始めました。しかし実際には、私の見解は間違っています。たとえば、次のとおりです。

コードをコピー コードは次のとおりです:

var o = {};
var a = {
プロ: "ジェン"
};
o.c = a;
delete o.c; //オブジェクト o の属性 a
を削除します console.log(o.c); // 未定義
console.log(a.pro); // zhenn

上記のコードから、o.c を削除した後、o.c が指す値が削除されていない、つまりオブジェクト a がまだ存在していることがわかります。そうでない場合、a.pro はコンパイル レベルに合格しないはずです。そういえば、delete はオブジェクトの属性を削除することと同じですが、この値はオブジェクト スタックにまだ残っていることがわかります。

2. 配列の操作については、まずコードを確認してください。

コードをコピーします コードは次のとおりです:
var arr = [1,2,3];
arr[2] を削除;
console.log(arr.length); // 3
console.log(arr); // [1,2,未定義]

もう一度、delete は実際には要素を削除するのではなく、要素に対応するキー値を削除するだけであることが証明されています。 delete の性質をさらに理解するために、Array の Pop メソッドと比較してください。以下のように:

コードをコピーします コードは次のとおりです:
var arr = [1,2,3];
arr.pop();
console.log(arr); // [1,2]
console.log(arr.length) // 2

今、真実が明らかにされるべきです。

3. オブジェクトと配列 に対する上記の操作は理解しやすいですが、変数の操作は必然的に混乱を招きます。コードは次のとおりです。

var a = 1;
を削除します;
アラート(a); // 1

関数 fn(){ 戻り値 42 }
fn を削除;
アラート(fn()); // 42

b = 2;
bを削除;
alert(b); // b が定義されていません;


これもグローバル変数なので、var で宣言した変数は削除できませんが、ECMA の説明では、delete は非常に奇妙だと言わざるを得ません。これは、var で宣言された変数と function で宣言された関数には DontDelete 属性があり、削除できないことを意味します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート