2012-09-15 13 views
5

==-、または==+を発見したとき、私はさまざまな条件を試してみるのに戸惑いました。 JSコンソールでこれは何ですか== - javascript演算子ですか?

、あなたが書くことができます。

var a = " "; 

次は

a == " "; 

本当ですが、これがあればしかし、それは本当だろう

a == " "; 

偽でありますあなたは言う:

a ==- " "; 

または

a ==+ " "; 

だから、この気の利いた==-演算子は何ですか?

+2

関連:http://stackoverflow.com/questions/1642028/what-is-the-name-of-this-operator –

答えて

9

これらは明確な演算子ではありません。

執筆:同じことが==+のために行く

(a) == (-" "); 

a ==- " "; 

は、次のように解析されます。

JavaScriptの奇妙な型変換規則のため、式はtrueと評価されます。次のようなものが発生します

  1. 単項-(または+)事業者数にそのオペランドを変換します。空文字列の場合、この変換の結果は0です。
  2. a == (-" ")は、" " == 0に相当します。 ==と比較されるタイプが異なる場合、1つ(おそらく両方)は、共通タイプを得るために変換されます。この場合、左側の" "0にも変換されます。
  3. 00を比較すると、trueとなります。

(上記Javascriptがこの結果に来るかもしれない方法の大まかな例で、actual rulesECMAScript specificationに埋葬されている。あなたが変換を防ぎ、比較の種類場合falseを取得する代わりに===演算子を使用することができますオブジェクトは異なります)。

1

これは演算子ではありません。-+が文字列を数値にキャストしているため、結果が得られます。この場合、空の文字列は0にキャストされ、falseと解釈され、等価演算子==は比較とキャストで問題を引き起こします常に===演算子を使用することをお勧めします、あなたは結果を得るでしょう、なぜあなたは後にしている:

console.log(a === ' '); // true 
console.log(a === ' '); // false 
console.log(a === -' '); // false 
console.log(a === +' '); // false 
3

それは単に続い==-(または+)。

(以下では、私は4つのスペースからなる文字列を意味する"<four spaces>"を書きます。)

あなたが" " ==- "<four spaces>"をすれば、あなたは​​に" "を比較、すなわち。​​は、マイナスが整数に変換されるため、0と評価されます。したがって、実際に" " == 0を実行します。これは、比較のために" "を整数に変換するため、真です。

" " == "<four spaces>"は、2つの異なる文字列を比較しているので、falseです。