有人可以解释为什么在JavaScript中,
alert({} == true) 显示错误
if ({}) alert('true') 显示真的?
改变结果的if条件有什么不同?
我想写一些简写参数验证器obj || (obj = {});,我对这个发现感到困惑.
if ({}) alert('true') - > true{}是一个对象,当在一个if语句的上下文中进行评估时,它会被强制转换为a Boolean,并且自从Boolean({})求值后true,就得到了if (true).这在ECMAScript规范第12.5节if语句中有记录:
生产If语句:if(Expression)语句的评估如下:
- 设exprRef是评估Expression的结果.
- 如果ToBoolean(GetValue(exprRef))为false,则返回(normal,empty,empty).
- 返回评估Statement的结果.
alert({} == true) - > false这个更棘手.从ECMAScript规范,第11.9.3节抽象等式比较算法:
比较x == y,其中x和y是值,产生真或假.这样的比较如下进行:
如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).
因此,{} == true将被评估为{} == Number(true),评估为{} == 1,即false.
这也是为什么1 == true评估true,但2 == true评估为false.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |