在JavaScript中{} ==是否为真?

Cri*_*hai 3 javascript

有人可以解释为什么在JavaScript中,

alert({} == true) 显示错误

if ({}) alert('true') 显示真的?

改变结果的if条件有什么不同?

我想写一些简写参数验证器obj || (obj = {});,我对这个发现感到困惑.

Joã*_*lva 6

if ({}) alert('true') - > true

{}是一个对象,当在一个if语句的上下文中进行评估时,它会被强制转换为a Boolean,并且自从Boolean({})求值后true,就得到了if (true).这在ECMAScript规范第12.5节if语句中有记录:

生产If语句:if(Expression)语句的评估如下:

  1. 设exprRef是评估Expression的结果.
  2. 如果ToBoolean(GetValue(exprRef))为false,则返回(normal,empty,empty).
  3. 返回评估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.