JavaScript isset() 相当の質問

JavaScript isset() 相当の質問

PHP では を実行できますif(isset($array['foo'])) { ... }。JavaScript では を使って同じことを行うことが多いのですが、これはまったく同じステートメントではありません。 が存在するがまたは(おそらく他の値も同様)であるif(array.foo) { ... }場合も、条件は false と評価されます。array.foofalse0

issetJavaScript でPHP に完全に相当するものは何ですか?

より広い意味では、存在しない変数や値のない変数などを JavaScript がどのように処理するかについての一般的で完全なガイドがあると便利です。


更新: 11 年 11 か月前にこの質問を投稿しましたが、いまだに多くのアクティビティがあります。今となっては、この質問を書いたときは、連想配列 (辞書とも呼ばれます) 内のプロパティの存在を確認する方法だけを知りたかったので、(私にとって) 正しい答えは または 演算子です。hasOwnPropertyローカルin変数やグローバル変数を確認することには興味がありませんでした。

しかし、そのことはよく覚えているものの、質問に書かれている内容ではその意図が明確ではなく、直接矛盾していることもあります。連想配列issetについては一度も言及していませんし、PHP では他のことも実行できます。これは、質問で要件を適切に記述することがいかに重要であるか、また、グローバル変数、ローカル変数、オブジェクト プロパティ、辞書キーなどが Huey、Dewey、Louie ではないことを私たち全員に教える教訓としましょう。

その間、(笑)、多くの人が同様に回答しているので、Google でこの質問を見つけた人にとっては、私の曖昧さが何らかの形で役に立ったことを嬉しく思います。とにかく、それを明確にしたかったのです。

ベストアンサー1

私は通常、typeofオペレーター:

if (typeof obj.foo !== 'undefined') {
  // your code here
}

"undefined"プロパティが存在しないか、その値が である場合は を返しますundefined

(参照:との違いはundefined定義されていません。

オブジェクトにプロパティが存在するかどうかを確認する方法は他にもあります。hasOwnProperty方法:

if (obj.hasOwnProperty('foo')) {
  // your code here
}

そしてin演算子:

if ('foo' in obj) {
  // your code here
}

最後の 2 つの違いは、hasOwnPropertyメソッドがプロパティがオブジェクト上に物理的に存在するかどうかをチェックすることです (プロパティは継承されません)。

演算子inはプロトタイプ チェーン内で到達可能なすべてのプロパティをチェックします。例:

var obj = { foo: 'bar'};

obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true

ご覧のとおり、メソッドをチェックすると、hasOwnPropertyが戻りfalsein演算子が を戻します。このメソッドは、がフォームを継承するため、プロトタイプ チェーン内で定義されます。truetoStringobjObject.prototype

おすすめ記事