JavaScript字符串解析为false

Dev*_*555 0 javascript

为什么这两个都解决为false:

console.log("potato" == false); //false
console.log("potato" == true); //false
Run Code Online (Sandbox Code Playgroud)

因为我在使用==松散比较时所知道的,JS 强制操作数.既然在JS中,应该是非空字符串true,为什么上面的返回false呢?

ste*_*ang 5

需要澄清==操作员.从ECMA-262第11.9.3节开始,规则6,规则7和后面的规则4确定了您的结果

规则6.如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y.

规则7.如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).

规则4.如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).

在你的情况下,falsetrue将被转换为01,而'potato'将被转换为NaN,比较表达式的值始终false.

"potato" == false // => "potato" == 0 => NaN == 0
"potato" == true // => "potato" == 1 => NaN == 1
Run Code Online (Sandbox Code Playgroud)

同样,'' == true相比之下,''将转换为0while true将被转换为1,表达式为false.

'' == false // => 0 == 0
'' == true // => 0 == 1
Run Code Online (Sandbox Code Playgroud)

由于非直观的实施==,===鼓励在比较中使用.