空数组为false,但在IF语句中返回true

kar*_*una 12 javascript arrays

这返回true:

[] == false
Run Code Online (Sandbox Code Playgroud)

但在这里,警报被称为:

if([]){ alert('empty array is true here'); }
Run Code Online (Sandbox Code Playgroud)

你能解释一下原因吗?

Ja͢*_*͢ck 14

部分11.9.3中的ECMAScript®语言规范,任何==如下比较完成的:

  1. 如果Type(x)与Type(y)相同,那么
    1. 如果Type(x)是Undefined,则返回true.
    2. 如果Type(x)为Null,则返回true.
    3. 如果Type(x)是Number,那么
      1. 如果x是NaN,则返回false.
      2. 如果y是NaN,则返回false.
      3. 如果x与y的Number值相同,则返回true.
      4. 如果x是+0且y是-0,则返回true.
      5. 如果x是-0且y是+0,则返回true.
      6. 返回false.
    4. 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的相同长度和相同字符),则返回true.否则,返回false.
    5. 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true.否则,返回false.
    6. 如果x和y引用同一个对象,则返回true.否则,返回false.
  2. 如果x为null且y未定义,则返回true.
  3. 如果x未定义且y为null,则返回true.
  4. 如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).
  5. 如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y.
  6. 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y.
  7. 如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).
  8. 如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y).
  9. 如果Type(x)是Object而Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y.
  10. 返回false.

在第一步,ToNumber()适用于false和屈服Number(0).在第二步中,规则#9适用ToPrimitive()于空数组,并且""转换为数值的转换Number(0)也是如此.

另外9.2节说明了在表达式中使用对象:

抽象操作ToBoolean根据此表将其参数转换为Boolean类型的值:

  • 未定义 - > false
  • 空 - >假
  • Boolean - >结果等于输入参数(无转换).
  • Number - >如果参数为+ 0,-0或NaN,则结果为false; 否则结果是真的.
  • String - >如果参数为空String(其长度为零),则结果为false; 否则结果是真的.
  • 对象 - >真


Par*_*rma 9

这是因为==在JS强制转换中并且如果一种类型可以转换为另一种类型,则返回值是true这里因为[]不能更改或与bool进行比较它是假的

,因为if([])检查nullundefined值以及因为[]既不是null也不是未定义它是回归真实

检查 在JavaScript比较中应该使用哪个等于运算符(== vs ===)?