为什么这两个都解决为false:
console.log("potato" == false); //false
console.log("potato" == true); //false
Run Code Online (Sandbox Code Playgroud)
因为我在使用==松散比较时所知道的,JS 强制操作数.既然在JS中,应该是非空字符串true,为什么上面的返回false呢?
需要澄清==操作员.从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).
在你的情况下,false和true将被转换为0和1,而'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)
由于非直观的实施==,===鼓励在比较中使用.
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |