W3G*_*eek 4 javascript conditional
我想知道下面的条件语法之间的核心区别是什么?
if (something) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
与
if (something == true) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
有什么不同吗?
编辑:我道歉.当问到这个问题时我打错了.我不是故意放三等号.我知道三等于是严格的算子.我的意思是问'=='是否相当于if(某事).
Fis*_*rdo 12
编辑:以下仅适用===于使用运算符的原始问题.
第一个将执行if语句的主体,如果something是"truthy",而第二个只执行它,如果它的类型和值相等true.
那么,什么是"真实的"?要理解这一点,你需要知道它的反面是什么:falsey.如果放在条件表达式中,JavaScript中的所有值都将被强制转换为布尔值.这是一个虚假值列表:
false0 (零)"" (空字符串)nullundefinedNaN所有其他价值都是真实的,虽然我可能错过了一些有些人会在评论中指出的模糊角落案例.
这是我对更新问题的回答:
条件这是错的.见Felix Kling的回答.if (something)和if (something == true)等价,虽然第二是多余的.something在任何一种情况下都将以相同的方式强制进行类型化.
Fel*_*ing 12
区别在于if(something),something被评估为布尔值.基本上就是这样
if(ToBoolean(something))
Run Code Online (Sandbox Code Playgroud)
where ToBoolean是一个内部函数,用于将参数转换为布尔值.你可以ToBoolean用双重否定来模拟:!!something.
在第二种情况下,两个操作数首先(最终)转换为数字,所以最终会得到
if(ToNumber(something) == ToNumber(true))
Run Code Online (Sandbox Code Playgroud)
这会导致非常不同的结果.同样,ToNumber是一个内部功能.它可以模拟使用(在某种程度上)一元加运算符:+something == +true.在实际算法中,如果是对象,something则首先传递 .ToPrimitivesomething
示例:
假使,假设
var something = '0'; // or any other number (not 0) / numeric string != 1
Run Code Online (Sandbox Code Playgroud)
if(something)将是true,因为'0'是一个非空字符串.
if(something == true)会false,因为ToNumber('0')IS 0,ToNumber(true)是1和0 == 1是false.
| 归档时间: |
|
| 查看次数: |
3276 次 |
| 最近记录: |