質問はタイトルにあります。Chromeコンソールで次のステートメントを実行しようとしたところ、(私にとっては)奇妙な結果が得られました:
true == 'true' // returns false
'true' == true // returns false
なんでそんな流れになるの?そこで型キャストが機能しないのに、次のステートメントで機能するのはなぜですか?
if ('true') true // returns true
質問はタイトルにあります。Chromeコンソールで次のステートメントを実行しようとしたところ、(私にとっては)奇妙な結果が得られました:
true == 'true' // returns false
'true' == true // returns false
なんでそんな流れになるの?そこで型キャストが機能しないのに、次のステートメントで機能するのはなぜですか?
if ('true') true // returns true
それらは同等に変換可能な型/値を表していないためです。で使用される変換は、 で使用される単純な変換==よりもはるかに複雑です。toBooleanif ('true')
したがって、このコードtrue == 'true'を指定すると、次のことがわかります。
"
Type(x)がの場合Boolean、比較の結果を返しToNumber(x) == yます。"
したがって、それが になることから始まりToNumber(true) == 'true'、これが であることがわかり1 == 'true'ます。次に、再試行します。
Type(x)isNumberとType(y)isの場合String、比較の結果を返しx == ToNumber(y)ます。
だから今それはやっている1 == ToNumber('true')、これ1 == NaNはもちろんですfalse。
true = ブール型
'true' = 文字列型
式 "if ('true')" は、if('foo') または他の文字列と同じ方法で 'true'(string) を true (boolean) として評価します。
true はブール値です。「true」は文字列です。
異なるデータ型を比較しています。 ここを見てください: http://w3schools.com/js/js_datatypes.asp