PHP では を実行できますif(isset($array['foo'])) { ... }
。JavaScript では を使って同じことを行うことが多いのですが、これはまったく同じステートメントではありません。 が存在するがまたは(おそらく他の値も同様)であるif(array.foo) { ... }
場合も、条件は false と評価されます。array.foo
false
0
isset
JavaScript でPHP に完全に相当するものは何ですか?
より広い意味では、存在しない変数や値のない変数などを JavaScript がどのように処理するかについての一般的で完全なガイドがあると便利です。
更新: 11 年 11 か月前にこの質問を投稿しましたが、いまだに多くのアクティビティがあります。今となっては、この質問を書いたときは、連想配列 (辞書とも呼ばれます) 内のプロパティの存在を確認する方法だけを知りたかったので、(私にとって) 正しい答えは または 演算子です。hasOwnProperty
ローカルin
変数やグローバル変数を確認することには興味がありませんでした。
しかし、そのことはよく覚えているものの、質問に書かれている内容ではその意図が明確ではなく、直接矛盾していることもあります。連想配列isset
については一度も言及していませんし、PHP では他のことも実行できます。これは、質問で要件を適切に記述することがいかに重要であるか、また、グローバル変数、ローカル変数、オブジェクト プロパティ、辞書キーなどが Huey、Dewey、Louie ではないことを私たち全員に教える教訓としましょう。
その間、(笑)、多くの人が同様に回答しているので、Google でこの質問を見つけた人にとっては、私の曖昧さが何らかの形で役に立ったことを嬉しく思います。とにかく、それを明確にしたかったのです。
ベストアンサー1
私は通常、typeof
オペレーター:
if (typeof obj.foo !== 'undefined') {
// your code here
}
"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
が戻りfalse
、in
演算子が を戻します。このメソッドは、がフォームを継承するため、プロトタイプ チェーン内で定義されます。true
toString
obj
Object.prototype