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