6

質問はタイトルにあります。Chromeコンソールで次のステートメントを実行しようとしたところ、(私にとっては)奇妙な結果が得られました:

true == 'true' // returns false
'true' == true // returns false

なんでそんな流れになるの?そこで型キャストが機能しないのに、次のステートメントで機能するのはなぜですか?

if ('true') true // returns true
4

5 に答える 5

16

それらは同等に変換可能な型/値を表していないためです。で使用される変換は、 で使用される単純な変換==よりもはるかに複雑です。toBooleanif ('true')

したがって、このコードtrue == 'true'を指定すると、次のことがわかります。

"Type(x)がの場合Boolean、比較の結果を返しToNumber(x) == yます。"

したがって、それが になることから始まりToNumber(true) == 'true'、これが であることがわかり1 == 'true'ます。次に、再試行します。

Type(x)isNumberType(y)isの場合String、比較の結果を返しx == ToNumber(y)ます。

だから今それはやっている1 == ToNumber('true')、これ1 == NaNはもちろんですfalse

于 2013-10-30T18:18:25.537 に答える
0

true = ブール型

'true' = 文字列型

式 "if ('true')" は、if('foo') または他の文字列と同じ方法で 'true'(string) を true (boolean) として評価します。

于 2013-10-30T18:21:46.343 に答える
-3

true はブール値です。「true」は文字列です。

異なるデータ型を比較しています。 ここを見てください: http://w3schools.com/js/js_datatypes.asp

于 2013-10-30T18:19:42.113 に答える