if条件如何在javascript中计算其值

how does if condition evaluates its value in javascript

本文关键字:计算 javascript 条件 if      更新时间:2023-11-22

javascript if condition如何确定其值?,参见此示例:

<script type="text/javascript">
var bar = ("something" == true);
alert(bar); // 1
if ("something") {
    alert("hey!"); // 2
}
</script>

为什么我到达//2点,而//1的"bar"是假的?

正如我所看到的,bar值的计算方式与if条件几乎相同,或者不是?

"something" == true为false,因为必须将字符串和布尔值强制转换为可以比较的类型。然而,if("something")之所以有效,是因为非空字符串是一个真实值。

这是因为javascript类型强制引擎的工作方式。当你说

"something" == true

javascript对"something"字符串调用ToNumber,将其与布尔值进行比较。"某物"产生的NaN不等于真。

然而

if("something")

只检查字符串是否正确。因为这不是一根空绳子,它实际上是真实的。

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

这是因为在第一种情况下,JavaScript将尝试将它们作为字符串(lit."something" == "true")进行比较,这将是错误的。

然而,在第二个条件中,表达式的结果是"something",当转换为布尔值时,它是true

有关详细信息,请参阅此处

if("something")

上面的声明将返回true,因为"something"是一个有效的字符串。如果它是一个空字符串(""),它将返回false。数字也会发生这种情况(0返回false,但1返回true)。

"something"==true中,两者都被转换为字符串,然后进行检查("something"=="true",将返回false)。

问题不在于javascript如何处理if语句,而在于javascript如何强制对象类型。

非空字符串是真的,尽管它不等于真。如果您尝试返回true"something != false,则可以检查此项。

正因为如此,很多人主张在JavaScript中进行严格的比较,以避免这些陷阱。

例如:

"something" !== false // true
"something" === true  // false
"" === false          // false
0 === false           // false

要了解这一点,有很多文章。我推荐道格拉斯·克罗克福德。