问题在标题中.我刚尝试在Chrome控制台中运行下一个语句并且对我来说很奇怪(对我来说)结果:
true == 'true' // returns false 'true' == true // returns false
为什么会这样?为什么不在那里进行类型转换,但在下一个声明中有效?
if ('true') true // returns true
解决方法
因为它们不代表同样可转换的类型/值. ==使用的转换比if(‘true’)使用的简单toBoolean转换复杂得多.
所以鉴于此代码为true ==’true’,它会发现:
“If
Type(x)
isBoolean
,return the result of the comparisonToNumber(x) == y
.”
所以你看它开始成为ToNumber(true)==’true’,这是1 ==’true’,然后再次尝试,它现在发现:
If
Type(x)
isNumber
andType(y)
isString
,return the result of the comparisonx == ToNumber(y)
.
所以现在它正在做1 == ToNumber(‘true’),即1 == NaN,当然这是假的.