Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript字符串解析为false_Javascript - Fatal编程技术网

JavaScript字符串解析为false

JavaScript字符串解析为false,javascript,Javascript,为什么这两个问题都是错误的: console.log("potato" == false); //false console.log("potato" == true); //false 因为我知道在使用=松散比较时,JS强制操作数。既然在JS中,非空字符串应该是true,为什么上面返回false呢?您的意思是Truthy和Falsy值: if ("potato") { console.log("true") } 但是在这里比较字符串“potato”和一个true,JavaScript

为什么这两个问题都是错误的:

console.log("potato" == false); //false
console.log("potato" == true); //false

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

您的意思是
Truthy和Falsy值

if ("potato") {
   console.log("true")
}

但是在这里比较字符串“potato”和一个true,JavaScript将尝试转换为一个可比较的东西,而在比较两个值时,情况并非如此。

您的意思是
Truthy和Falsy值

if ("potato") {
   console.log("true")
}

但是在这里比较字符串“potato”和一个true,JavaScript将尝试转换为一个可比较的东西,而在比较两个值时,情况并非如此。

需要澄清一下
=
操作符。根据规则6、规则7和更高版本的规则4确定结果

规则6。如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y

规则7。如果类型(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
'' == false // => 0 == 0
'' == true // => 0 == 1
类似地,在
'==true
比较中,
'
将转换为
0
,而
true
将转换为
1
,表达式为
false

"potato" == false // => "potato" == 0 => NaN == 0
"potato" == true // => "potato" == 1 => NaN == 1
'' == false // => 0 == 0
'' == true // => 0 == 1

由于
==
的非直观实现,鼓励使用
==
进行比较。

需要对
==
运算符进行澄清。根据规则6、规则7和更高版本的规则4确定结果

规则6。如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y

规则7。如果类型(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
'' == false // => 0 == 0
'' == true // => 0 == 1
类似地,在
'==true
比较中,
'
将转换为
0
,而
true
将转换为
1
,表达式为
false

"potato" == false // => "potato" == 0 => NaN == 0
"potato" == true // => "potato" == 1 => NaN == 1
'' == false // => 0 == 0
'' == true // => 0 == 1

由于
==
的非直观实现,鼓励使用
==
进行比较。

这里有一篇关于此主题的有用文章:@jakeclarkson您的评论应该作为正确答案发布+1.anyway@jakeclarkson当前位置从那里我无法理解这就是为什么在这里被问到。现在清楚了,谢谢大家。这里有一篇关于这个话题的有用文章:。@jakeclarkson你的评论应该作为正确答案发布+1.anyway@jakeclarkson当前位置从那里我无法理解这就是为什么在这里被问到。好了,谢谢大家。