5

javascript if 条件如何确定其值?,请参见以下示例:

<script type="text/javascript">

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

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

</script>

为什么我指向 //2 而 //1 的'bar' 是假的?

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

4

5 回答 5

4

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

于 2012-07-18T16:59:20.880 回答
2

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

"something" == true

javascript 在您的“某物”字符串上调用 ToNumber 以将其与布尔值进行比较。“某物”产生不等于真的 NaN。

然而

if("something")

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

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

于 2012-07-18T17:01:07.073 回答
1

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

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

有关详细信息,请参见此处。

于 2012-07-18T17:00:11.007 回答
1
if("something")

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

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

于 2012-07-18T17:01:33.393 回答
0

与其说 javascript 如何处理 if 语句,不如说是 javascript 如何强制对象类型。

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

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

例如:

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

要阅读此内容,有大量文章。我推荐道格拉斯·克罗克福德

于 2012-07-18T17:09:17.053 回答