1

重複の可能性:(
'0'?'a':'b')が( '0' == true?'a':'b')とは異なる動作をするのはなぜですか

私は現在Javascriptを学んでおり、これまでのところこの言語に満足しています。

今朝、テストを書いているとき、私は説明できない何かに気づきました:

ブール式を評価する場合、次のようになります。

// a && b returns b in case a && b are evaluated to true: OK
'2' && '3' => '3'
'3' && '2' => '2'

// a && b returns a in case a is evaluated to false, b otherwise: OK
false && '' => false
'' && false => ''

// '' and '0' are evaluated to false in a boolean context: OK
'' == false => true
'0' == false => true

// Here is the "problem":
'' && '0' => '' // To be expected: both operands evaluate to false
'0' && '' => '' // What ?!!

だから私の質問は簡単です:なぜ'0' && ''戻るの''ですか?

両方のオペランドがfalseと評価されることを期待しますが、そのコンテキストではそうで'0'はないようです。なぜそうなのですか?

4

1 に答える 1

2

''は偽の値ですが、は偽の値で'0'はありません。

(試行'0' == falseすると==型変換が行われるため、trueが返されます。)

于 2012-10-17T09:16:46.587 に答える