JavaScript if/else 条件和比较 - 差异
JavaScript If/Else Conditions & Comparisons - Differences
好的,这是我的简短问题:
我知道===
和!==
运算符将比较类型,然后比较值,==
和!=
将强制转换类型,然后只比较值。
if(myVar)
和if(!myVar)
呢?
if(myVar == true)
和if(myVar == false)
的行为有什么区别吗?
是的,有区别。例如:
if('true' == true) {
alert("This doesn't happen");
}
if('true') {
alert("But this does happen.");
}
原因何在?它们都转换为 number
以进行比较。 'true'
转换为NaN
,true
转换为1
。
避免这种愚蠢,永远不要写== true
或== false
。
是的,有区别。如前所述,如果将值与 ==
进行比较,则会进行类型转换。
如果值的类型不同,它们都将转换为字符串或数字。 如果其中一个值是布尔值,另一个不是布尔值,则两个值都将转换为数字。
比较算法在规范的第 11.9.3 节中定义。重要的步骤在这里:
7. 如果 Type(y) 是布尔值,则返回比较结果
x == ToNumber(y)
。
因此,true
首先转换为数字,然后myVar
也将转换为数字。
但是,如果您只有if(myVar)
,则该值将转换为布尔值:
2. 如果
ToBoolean(GetValue(exprRef))
是真的,那么
ToNumber
[spec] 和 ToBoolean
[spec] 可以返回非常不同的结果。
注意:如果myVar
实际上是布尔值,则if(myVar == true)
和if(myVar)
之间没有区别。
是的,if(myVar) and if(!myVar)
和if(myVar == true) and if(myVar == false)
都有很大的不同
在if(myVar) and if(!myVar)
中,myVar 将为每个 "false" 值返回 true(空字符串, 0, null, false, undefined, NaN)
而if(myVar == true)
和if(myVar == false)
检查 myVar 值是真还是假。即使 myVar 值为 NULL、NaN 或未定义的 0,它也会像
if(NULL == true)
总结:
NOT operator'!' converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
And if you compare values with '==', JavaScript does type conversion which can lead to unexpected behavior (like undefined == null).
- 如何比较两个数组,然后返回差异的索引
- Javascript比较两个日期以获得差异
- 比较两个数组并找出差异
- JavaScript if/else 条件和比较 - 差异
- 比较 2 个数组并找到独特的差异
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- 比较两个 HTML 源并显示视觉差异
- 比较美国日期标准中两个日期之间的差异 mm/dd/yyyy
- 比较两个大小相同的差异数组
- 比较两个具有相同结构的 XML 文件并找出差异
- 将2个对象数组与Undercore进行比较以找出差异
- Nodejs 比较两个不同的 excel 文件并发现它们的差异
- jquery将值存储在数组中并比较差异
- Lodash / javascript:比较两个集合并返回差异
- Jquery比较数据/对象的差异检查
- 这些数组之间的差异以及如何比较它们
- 比较两种主干模型之间的差异
- 在javascript中,我如何比较两个时间戳,看看他们有多少天的差异
- 比较两个字符串,找出最初和最后的差异
- 用javascript或datejs(日期差异)比较两个日期