如果 X 与 Y 是相同类型 a. 如果 X 的类型是 Undefined,返回 true; b. 如果 X 的类型是 Null,返回 true; c. 如果 X 的类型是 Number;
1. 如果 X 是 `NaN`,返回 `false`;
2. 如果 Y 是 `NaN`,返回 `false`;
3. 如果 X 的值与 Y 的值相同,返回 `true`;
4. 如果 X 是 `+0` 、且 Y 是 `-0`,返回 `true`;
5. 如果 X 是 `-0` 、且 Y 是 `+0`,返回 `true`;
6. 否则返回 `false`。
d. 如果 X 的类型是 String,当 X 与 Y 拥有相同的字符序列(即长度相同、逐位字符也相同)时返回 true,否则返回 false。 e. 如果 X 的类型是 Boolean,当 X 与 Y 的值同为 true 或同为 false 时返回 true,否则返回 false。 f. 如果 X 与 Y 指向相同的对象时返回 true,否则返回 false。
如果 X 是 null、且 Y 是 undefined,返回 true;
如果 X 是 undefined、且 Y 是 null,返回 true;
如果 X 的类型是 Number、且 Y 的类型是 String,转换为 X == ToNumber(Y) 比较;
如果 X 的类型是 String、且 Y 的类型是 Number,转换为 ToNumber(X) == Y 比较;
如果 X 的类型是 Boolean,转换为 ToNumber(X) == Y 比较;
如果 Y 的类型是 Boolean,转换为 X == ToNumber(Y) 比较;
如果 X 的类型是 String 或 Number、且 Y 的类型是 Object,转换为 X == ToPrimitive(Y) 比较;
如果 X 的类型是 Object、且 Y 的类型是 String 或 Number,转换为 ToPrimitive(X) == Y ;
完整的
==
比较运算规则看 ES 规范:http://es5.github.io/#x11.9.3【翻译】
[] == []
对应规则 1.f;[] == 0
对应规则 9。P.S.
ToNumber
、ToPrimitive
是怎么规定的我上面贴的规范里也有,就不翻译了。