==-
私が発見したとき、またはを発見したとき、私はさまざまな条件を試してみ==+
ました。
JSコンソールでは、次のように記述できます。
var a = " ";
次に、次のことが当てはまります
a == " ";
しかし、これは誤りです
a == " ";
ただし、次のように言うと当てはまります。
a ==- " ";
また
a ==+ " ";
では、この気の利いた==-
オペレーターは何ですか?
==-
私が発見したとき、またはを発見したとき、私はさまざまな条件を試してみ==+
ました。
JSコンソールでは、次のように記述できます。
var a = " ";
次に、次のことが当てはまります
a == " ";
しかし、これは誤りです
a == " ";
ただし、次のように言うと当てはまります。
a ==- " ";
また
a ==+ " ";
では、この気の利いた==-
オペレーターは何ですか?
それらは別個の演算子ではありません。
書き込み:
a ==- " ";
次のように解析されます:
(a) == (-" ");
同じことが。にも当てはまり==+
ます。
true
この式は、Javascriptの奇妙な型変換規則のために評価されます。次のようなことが発生します。
-
(または+
)演算子は、そのオペランドを数値に変換します。空白の文字列の場合、この変換の結果はです0
。a == (-" ")
その場合、はと同等" " == 0
です。と比較したタイプ==
が異なる場合、一方(場合によっては両方)は、共通のタイプを取得するために変換されます。この場合、" "
左側のもに変換され0
ます。0
して0
、を生成しtrue
ます。(上記は、Javascriptがこの結果に到達する方法の大まかな例であり、実際のルールはECMAScript仕様に埋め込まれています。===
代わりに演算子を使用して、変換を防ぎ、false
比較されるオブジェクトのタイプが異なるかどうかを取得できます。)
単に(または)==
が後に続きます。-
+
"<four spaces>"
(以下では、4つのスペースで構成される文字列を意味するように記述します。)
つまり、そうする場合は" " ==- "<four spaces>"
、と比較" "
し-"<four spaces>"
ます。マイナスを適用すると整数に変換されるため、に-"<four spaces>"
評価されます。0
したがって、実際には、を実行します。これは、比較のためにを整数に" " == 0
変換するためです。" "
" " == "<four spaces>"
ただし、2つの異なる文字列を比較しているため、はfalseです。
それは演算子ではありません。これらの結果が得られるのは、文字列を数値にキャストしているためです-
。+
この場合、空の文字列が数値にキャストされ、0
それがと解釈されますfalse
。さらに、equals演算子==
を使用すると、比較とキャストで問題が発生するため、常に推奨されます。演算子を使用すると、目的の===
結果が得られます。
console.log(a === ' '); // true
console.log(a === ' '); // false
console.log(a === -' '); // false
console.log(a === +' '); // false