「JavaScript/演算子」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
Ef3 (トーク | 投稿記録)
→‎関係演算子: a in b; a instanceof b
448 行
と表すことができます(推奨)。
 
== 比較関係演算子 ==
'''比較関係演算子'''(ひかくえんざんし、''comparison operator'')とは、大小関係あるいは同値関係を比較して[[JavaScript/Boolean|真偽値]]を返す演算子です。
 
{| class="wikitable"
|+ JavaScriptの比較関係演算子
! 演算子
! 意味
479 行
| <code>''a'' <nowiki>!</nowiki>== ''b''</code>
| 厳密に等しくない
|-
| <code>''a'' in ''b''</code>
| <var>a</var> がオブジェクト <var>b</var> のプロパティか
|-
| <code>''a'' instanceof ''b''</code>
| <var>a</var> が <var>b</var> のインスタンスか
|}
 
=< や => のようなに = が先にくる比較関係演算子は存在しないので気をつけてください(特に => はアロー関数の構文で書き方によっては SyntaxError とならず発見困難なバグの原因になります)。大小比較は必ず手前に大なり小なり、後にイコールが来ます。厳密な比較関係演算子は暗黙的な型変換を引き起こしません。すなわち値が等しくかつ型も等しくNaNでもない場合に<code>true</code>を返します。たとえば、<code>1</code>と <code>"1"</code> は等しい (<code>1 == "1"</code>) ですが、厳密には等しくありません (<code>1 !== "1"</code>)。
 
<code>==</code>演算子は被演算子に真偽値が含まれる場合は、それを数値に変換して比較します。たとえば、
 
<syntaxhighlight lang="javascript">
Number(false); // 0
Number(true); // 1
</syntaxhighlight>
 
<!---
なので<code>null == false</code>は<code>null == 0</code>に変換され<code>false</code>を返します。このことから、<code>x == false</code>と<code>!x</code>は必ずしも等しい条件式にならないので注意してください(<code>x</code>が<code>null</code>の場合、前者は<code>false</code>、後者は<code>true</code>を返す)。
 
<code>==</code>演算子は被演算子の一方が数値で他方が数値以外のオブジェクトの場合、他方を数値に変換して比較します。たとえば<code>[] == ![]</code>のような比較の場合、<code>![]</code>が<code>false</code>に変換されるので<code>[] == false</code>になり、被演算子の<code>false</code>が<code>0</code>に変換されて<code>[] == 0</code>になり、被演算子の一方が数値の<code>0</code>なので他方の<code>[]</code>が数値に変換され、<code>0 == 0</code>になり、結果として<code>true</code>になります。
 
この部分、暗黙的な型変換を実際より単純化して捉えている。この論法が成り立つなら false==false が false になってしまう。もちろんそんなことはなく、比較演算子の左辺右辺の(型ではなく)値によって暗黙な型変換の挙動が決定し、簡素に表現できるほど単純な規則はない。
 
<code>==</code>演算子は被演算子に真偽値が含まれる場合は、それを数値に変換して比較します。たとえば、
この様な理由から、==(!=)は使用せず、===(!==)を使用し暗黙的な型変換を抑制することが要求される。
-->
 
{{コラム|0と-0の比較|