如果条件在javascript中评估其值,该怎么做?

时间:2012-07-18 16:54:52

标签: javascript

javascript如果条件确定其值?,请参阅此示例:

<script type="text/javascript">

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

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

</script>

为什么我在// 1处的'bar'为false时指向// 2?

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

5 个答案:

答案 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