Zet*_*eta 10
[]是一个数组,但是![]是一个布尔值.每当您尝试比较具有不同类型的两个对象时,==两个对象都应转换为可比较的对象(使用ToNumber,请参阅11.9.3中的步骤7.).这就是为什么[] == ![]得到true,第一个空数组被求值的原因false.
11.9.3抽象等式比较算法
比较x == y,其中x和y是值,产生真或假.这样的比较如下进行:
- [...]
- 如果x为null且y未定义,则返回true.
- 如果x未定义且y为null,则返回true.
- 如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).
- 如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y.
- 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y.
- 如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).
- 如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y).
- 如果Type(x)是Object而Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y.
- 返回false.
但是,如果使用strict类型比较运算符,===则结果为false,因为两种类型都不同:
11.9.6严格的等式比较算法
比较x === y,其中x和y是值,产生真或假.这样的比较如下进行:
- 如果Type(x)与Type(y)不同,则返回false.
- 如果Type(x)是Undefined,则返回true.
- 如果Type(x)为Null,则返回true.
- 如果Type(x)是Number,那么
- 如果x是NaN,则返回false.
- 如果y是NaN,则返回false.
- 如果x与y的Number值相同,则返回true.
- 如果x是+0且y是-0,则返回true.
- 如果x是-0且y是+0,则返回true.
- 返回false.
- 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的长度和字符相同),则返回true; 否则,返回false.
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true; 否则,返回false.
- 如果x和y引用同一个对象,则返回true.否则,返回false.
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |