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

if条件如何在javascript中计算其值,javascript,Javascript,javascript if条件如何确定其值?请参见以下示例: <script type="text/javascript"> var bar = ("something" == true); alert(bar); // 1 if ("something") { alert("hey!"); // 2 } </script> 变量条=(“某物”==true); 警告(条);//1. 如果(“某物”){ 警惕(“嘿!”);//2 } 为什么我到达点//2

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

<script type="text/javascript">

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

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

</script>

变量条=(“某物”==true);
警告(条);//1.
如果(“某物”){
警惕(“嘿!”);//2
}
为什么我到达点//2,而//1处的“bar”为false


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

“something”==true
为false,因为必须将字符串和布尔值强制为可比较的类型。但是,
if(“something”)
之所以有效,是因为非空字符串是真实值。

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

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


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

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

然而

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

详情如下:

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


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

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

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

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

例如:

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

要了解这一点,有很多文章。我建议。

这里的问题可能是
==
==
的不可预测性。啊…在查看真相表之后,可能会重复…我想我会一直尝试使用
==
是真的“==true
的计算结果也是
false
。如果它只是作为字符串进行比较(如您所指出的),那么这应该是
true
。现在我很困惑,
“something”==false
“something”==true
都是假的,为什么?因为当
=
尝试进行类型强制时,
true
false
,而
“某物”
总是以不同的值出现。在这种情况下并不奇怪,考虑到
'something'
无论如何都不是布尔值(因此比较它们没有意义)。再次阅读,它说
(“something”!=false)
(“something”==false)
"something" !== false // true
"something" === true  // false
"" === false          // false
0 === false           // false