[解決済み] delete a.x vs a.x = undefined
質問
どちらをやっても実質的な差はないのでしょうか?
delete a.x;
対
a.x = undefined;
ここで
a = {
x: 'boo'
};
は同等と言えるのでしょうか?
(のようなものは考慮に入れていません)。
V8は
delete
より良い"
)
解決方法は?
両者は同等ではありません。主な違いは、設定
a.x = undefined
というのは
a.hasOwnProperty("x")
は依然としてtrueを返すので、その場合は
for in
ループ、および
Object.keys()
delete a.x
というのは
a.hasOwnProperty("x")
は false を返します。
両者が同じである方法は、テストによってプロパティが存在するかどうかを知ることができないことです。
if (a.x === undefined)
プロパティが存在するかどうかを判断する場合には、この方法は使用しないでください。
// If you want inherited properties
if ('x' in a)
// If you don't want inherited properties
if (a.hasOwnProperty('x'))
プロトタイプチェーンに続く
(言及された
zzzzBov
) 呼び出し
delete
を設定すると、プロトタイプの連鎖を上がっていくことができます。一方、値をundefinedに設定すると、連鎖したプロトタイプの中からそのプロパティを探すことはできません。
http://jsfiddle.net/NEEw4/1/
var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
extended.x = "overriding";
console.log(extended.x); // overriding
extended.x = undefined;
console.log(extended.x); // undefined
delete extended.x;
console.log(extended.x); // fromPrototype
継承されたプロパティの削除
削除しようとするプロパティが継承されている場合。
delete
は影響を与えません。つまり
delete
はオブジェクト自身からプロパティを削除するだけで、継承されたプロパティは削除しません。
var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
delete extended.x;
console.log(extended.x); // Still fromPrototype
したがって、あるオブジェクトの値が未定義になることを確認する必要がある場合。
delete
は、そのプロパティが継承されている場合には機能しないので、そのプロパティを設定(オーバーライド)する必要があります。
undefined
その場合 チェックする場所がなければ
hasOwnProperty
しかし、どこもかしこもそのチェックのために
hasOwnProperty
関連
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Node.JSを使用して、JSONファイルを(サーバー)メモリに読み込むにはどうすればよいですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】JavaScriptで配列の要素を削除する - delete vs splice
-
[解決済み】状態配列から項目を削除する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
vue ディレクティブ v-html と v-text
-
Vueでルートネスティングを実装する例
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] JavaScriptでStackとQueueを実装するには?