谈话很便宜,我会展示我的代码.
var a; // a = undefined
if(a == false){ // As I typed == not ===, a needs to be translated to boolean (undefined == false) but it doesn't
return false;
}
else {
return true;
}
// true
Run Code Online (Sandbox Code Playgroud)
这返回true但我确信它会返回false,因为当我使用double equal时,undefined与false相同.
当我尝试使用时,事情变得奇怪
if(!a){..} else {..};
// false
Run Code Online (Sandbox Code Playgroud)
在这里,我得到了我的假,但直到这一刻,我认为(!a)和(a == false)绝对等于.
简短的回答:
!a 将值转换为布尔值.
a == false 将值与布尔值进行比较.
这是两种不同的操作.
!a相当于Boolean(a) ? false : true.如果是,则Boolean(a)返回falsea
undefinednull0''NaNfalse在其他每种情况下它都会返回true.
什么发生在a == false一个更进化的有点,但并不是很复杂.发生的最重要的事情false是转换为数字,所以你实际上是比较a == 0.但undefined在比较算法中以特殊方式处理.它没有转换为任何其他类型,因此算法只返回false.
我为JavaScript课程编写了以下交互式工具,它显示了在比较两个值时执行算法的哪些步骤:
类似的问题:
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |