ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で `delete obj` が `foo` も削除しないのはなぜですか?

JavaScript で `delete obj` が `foo` も削除しないのはなぜですか?

Barbara Streisand
リリース: 2024-11-30 08:10:14
オリジナル
264 人が閲覧しました

Why Doesn't `delete obj` Also Delete `foo` in JavaScript?

JavaScript の削除演算子の詳細

あなたが述べたように、JavaScript の削除演算子は混乱を招く可能性があります。提供したコード スニペットを調べてみましょう:

var obj = {
    helloText: "Hello World!"
};

var foo = obj;

delete obj;
ログイン後にコピー

このコードを実行すると、obj を削除しようとしたため、obj と foo の両方が null になることが予想されます。しかし、そうではありません。 obj は null になりますが、foo は obj が指していたのと同じオブジェクトを参照したままです。

オブジェクト参照を理解する

この動作を理解する鍵は、JavaScript のオブジェクト参照システムにあります。 。 JavaScript オブジェクトは参照型です。つまり、実際のデータではなくメモリ アドレスを保持します。上の例では、obj と foo はメモリ内の同じアドレス、つまり「helloText」プロパティを含むオブジェクトを指す 2 つの異なる変数です。

ガベージ コレクションの役割

JavaScript は、参照されていないオブジェクトをメモリから自動的に削除するガベージ コレクション メカニズムを採用しています。では、delete obj を使用してもオブジェクトが削除されないのはなぜですか?

削除演算子の動作

JavaScript の delete 演算子は、実際にはオブジェクト自体を削除しません。代わりに、それへの参照のみが削除されます。これは、オブジェクト自体を削除すると、他の参照 (foo など) が存在しない場所を指したままになり、エラーが発生するためです。

ガベージ コレクションへの影響

delete は単にオブジェクトへの参照を削除するだけで、ガベージ コレクターがオブジェクトをいつ削除するかを決定します。コード内にオブジェクトへの参照が他にない場合、そのオブジェクトはガベージ コレクションの対象となり、メモリから削除されます。

ベスト プラクティス

削除演算子の使用は次のとおりです。パフォーマンスの向上が保証されず、コードのデバッグが困難になる可能性があるため、一般的には推奨されません。ただし、これを使用すると、不要になったオブジェクトへの参照を明示的に削除し、ガベージ コレクターのクリーンアップ プロセスを支援できます。

以上がJavaScript で `delete obj` が `foo` も削除しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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