Javascript中的if条件语句如何确定其值?看这个例子:
<script type="text/javascript">
var bar = ("something" == true);
alert(bar); // 1
if ("something") {
alert("hey!"); // 2
}
</script>
为什么在“bar”为false的情况下我会到达//2点?
就我所看到的,bar
值的计算方式与if条件几乎相同,是这样吗?
Javascript中的if条件语句如何确定其值?看这个例子:
<script type="text/javascript">
var bar = ("something" == true);
alert(bar); // 1
if ("something") {
alert("hey!"); // 2
}
</script>
为什么在“bar”为false的情况下我会到达//2点?
就我所看到的,bar
值的计算方式与if条件几乎相同,是这样吗?
"something" == true
是假的,因为字符串和布尔值必须被强制转换成可比较的类型。然而,if("something")
是可以工作的,因为非空字符串是一个真实值。
"something" == true
在JavaScript中,当你将一个字符串与布尔值进行比较时,会调用ToNumber方法来将字符串转换成数字。但是,如果这个字符串无法转换成数字,例如"something"这个字符串,它会产生NaN,而NaN不等于true。
然而,
if("something")
仅检查字符串是否为真值。因为它不是空字符串,实际上是真值。
更多信息请参见:http://webreflection.blogspot.co.il/2010/10/javascript-coercion-demystified.html
"something" == "true"
),这将返回false。"something"
,当转换为布尔值时,其为true
。
详情请参见此处。
"true" == true
的计算结果也是 false
。如果只是将它们作为字符串进行比较(正如您所指出的那样),这应该是 true
。 - Sujayif("something")
true
,因为"something"
是一个有效的字符串。如果它是一个空字符串(""
),则会返回false
。这也发生在数字上(0
返回false
,但1
返回true
)。"something"==true
中,两者都被转换为字符串然后进行检查("something"=="true",这将返回false
)。关键不在于JavaScript如何处理if语句,而在于JavaScript如何强制转换对象类型。
非空字符串是真值,尽管它不等于true。您可以通过尝试"something != false
来检查这一点,它将返回true
。
因此,许多人主张在JavaScript中使用严格比较以避免这些陷阱。
例如:
"something" !== false // true
"something" === true // false
"" === false // false
0 === false // false
如果想了解更多相关内容,有很多文章可以参考。我推荐Douglas Crockford。
"something" == false
和 "something" == true
都是 false? - Jaime Hablutzel==
尝试进行类型转换时,true
、false
和 'something'
总是变成不同的值。在这种情况下并不令人惊讶,考虑到 'something'
本身就不是布尔值(因此比较它们没有意义)。 - cHao("something" != false)
和 ("something" == false)
。 - Torsten Walter
==
比===
不可预测。 - Waleed Khan===
。 - Jaime Hablutzel