1

私は現在javascriptを練習していますが、現在オブジェクト検出に問題があります。オブジェクトを作成して、それが存在するかどうかを検出したいと思います。以下は私が現在使用しているいくつかのサンプルコードです。

以下のコードサンプルは、オブジェクトを作成する方法です。

var obj = obj || {};

これを使うべきですか?

if (typeof obj !== "undefined") {
   // code
}

それともこれ?

if (obj !== null) {

}
4

2 に答える 2

3

undefinedは、変数に値が割り当てられていないことを意味します。値nullは、値が割り当てられていることを示しますnull。演算子(およびその===否定)は型強制!==を防ぎます。

どちらが正しいですか?それはすべてあなたが達成しようとしていることに依存します。undefinedとはどちらnullも「偽の」値です。つまり、それぞれfalseがブールコンテキストで評価されます(false、、、0および空の文字列と同様)。

objの場合、はnulltypeof objない ことに注意してください"undefined"

于 2012-07-20T02:40:24.987 に答える
0

通常の方法は、次を使用することです。

var obj = obj || {};

そのコードが実行されると、値が割り当てられていない可能性がありますがobj、(宣言のために)定義されていることを確認できます。var

の値がobj「falsey」値に解決される場合は、新しいオブジェクトへの参照を割り当てます。

考えられる結果は次のとおりです。

  1. 値が割り当てられていない場合objは、新しいオブジェクト参照が割り当てられます。

  2. 以前に「falsey」値が割り当てられていた場合objは、新しいオブジェクト参照に置き換えられます(falsey値が割り当てられたコードが混乱する可能性があります)。

  3. obj以前に「真の」プリミティブ値が割り当てられている場合、次のプロパティの割り当てはobjエラーをスローし、スクリプトの実行は停止します。

  4. objがすでに以外のオブジェクトへの参照である場合、nullプロパティの後続の割り当てはそのオブジェクトになります。オブジェクトの種類によっては、問題ない場合があります。か否か。おそらく、あなたのコントロール外の何かがオブジェクトを作成したので、あなたの知らないうちにそれを変更または破壊するかもしれません。あなたは何をしますか?

一般に、javascriptでは、対処しているのが自分ではないケース2と3、または4を処理するobjことはできません。したがって、他の名前と衝突する可能性が低い名前を使用して、#1または#4を取得し、うまくいくことを願っています。

ちなみに、あなたの後に追加されたコードは、コードが実行された時点で#1を持っていたとしても、(多かれ少なかれ)#4になる可能性があります。

次のようなテストには、追加の利点はありません。

if (typeof obj == 'undefined')

結果は本質的に同じだからです。

于 2012-07-20T03:40:53.577 に答える