質問はタイトルにあります。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
それらは同等に変換可能な型/値を表していないためです。で使用される変換は、 で使用される単純な変換==
よりもはるかに複雑です。toBoolean
if ('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