JavaScript中的if条件语句如何评估其值

5

Javascript中的if条件语句如何确定其值?看这个例子:

<script type="text/javascript">

var bar = ("something" == true);
alert(bar); // 1

if ("something") {
    alert("hey!"); // 2
}

</script>

为什么在“bar”为false的情况下我会到达//2点?

就我所看到的,bar值的计算方式与if条件几乎相同,是这样吗?


这里的问题可能是=====不可预测。 - Waleed Khan
1
啊,JavaScript真值表…… - Jeroen
在查看了那个真值表之后,我认为我将始终尝试使用 === - Jaime Hablutzel
5个回答

4
< p >"something" == true 是假的,因为字符串和布尔值必须被强制转换成可比较的类型。然而,if("something")是可以工作的,因为非空字符串是一个真实值。


2
由于 JavaScript 类型转换引擎的工作方式,这就是为什么会出现这种情况。当你说:
"something" == true

在JavaScript中,当你将一个字符串与布尔值进行比较时,会调用ToNumber方法来将字符串转换成数字。但是,如果这个字符串无法转换成数字,例如"something"这个字符串,它会产生NaN,而NaN不等于true。

然而,

if("something")

仅检查字符串是否为真值。因为它不是空字符串,实际上是真值。

更多信息请参见:http://webreflection.blogspot.co.il/2010/10/javascript-coercion-demystified.html


1
那是因为在第一种情况下,JavaScript会尝试将它们作为字符串进行比较(即"something" == "true"),这将返回false。
但是,在第二个条件中,表达式的结果是"something",当转换为布尔值时,其为true详情请参见此处。

但是 "true" == true 的计算结果也是 false。如果只是将它们作为字符串进行比较(正如您所指出的那样),这应该是 true - Sujay

1
if("something")

上面的声明将返回true,因为"something"是一个有效的字符串。如果它是一个空字符串(""),则会返回false。这也发生在数字上(0返回false,但1返回true)。
"something"==true中,两者都被转换为字符串然后进行检查("something"=="true",这将返回false)。

0

关键不在于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
因为当 == 尝试进行类型转换时,truefalse'something' 总是变成不同的值。在这种情况下并不令人惊讶,考虑到 'something' 本身就不是布尔值(因此比较它们没有意义)。 - cHao
再仔细读一遍,它说的是 ("something" != false)("something" == false) - Torsten Walter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接