javascript if 条件如何确定其值?,请参见以下示例:
<script type="text/javascript">
var bar = ("something" == true);
alert(bar); // 1
if ("something") {
alert("hey!"); // 2
}
</script>
为什么我指向 //2 而 //1 的'bar' 是假的?
正如我所看到bar
的,值的计算方式几乎与 if 条件相同,还是没有?
javascript if 条件如何确定其值?,请参见以下示例:
<script type="text/javascript">
var bar = ("something" == true);
alert(bar); // 1
if ("something") {
alert("hey!"); // 2
}
</script>
为什么我指向 //2 而 //1 的'bar' 是假的?
正如我所看到bar
的,值的计算方式几乎与 if 条件相同,还是没有?
"something" == true
是假的,因为字符串和布尔值必须被强制转换为可以比较的类型。但是,if("something")
之所以有效,是因为非空字符串是一个真值。
这是因为 javascript 类型强制引擎的工作方式。当你说
"something" == true
javascript 在您的“某物”字符串上调用 ToNumber 以将其与布尔值进行比较。“某物”产生不等于真的 NaN。
然而
if("something")
仅检查字符串是否真实。因为它不是一个空字符串,它实际上是真的。
更多信息:http: //webreflection.blogspot.co.il/2010/10/javascript-coercion-demystified.html
这是因为在第一种情况下,JavaScript 会尝试将它们作为字符串(点亮"something" == "true"
)进行比较,这将是错误的。
但是,在第二个条件中,表达式的结果是"something"
,当转换为布尔值时,是true
。
if("something")
上面的声明将返回true
,因为"something"
它是一个有效的字符串。false
如果它是一个空字符串 ( ""
) ,它将返回。它也发生在数字(0
返回false
,但1
返回true
)。
在"something"==true
中,两者都转换为字符串,然后检查(“something”=="true",将返回false
)。
与其说 javascript 如何处理 if 语句,不如说是 javascript 如何强制对象类型。
非空字符串是真的,尽管它不等于真。如果你尝试"something != false
返回,你可以检查这个true
。
正因为如此,很多人提倡在 JavaScript 中进行严格比较以避免这些陷阱。
例如:
"something" !== false // true
"something" === true // false
"" === false // false
0 === false // false
要阅读此内容,有大量文章。我推荐道格拉斯·克罗克福德。