复习一下 js 中的原型链模型
比较运算 x == y,其中 x 和 y 是值,产生 true 或者 false。这样的比较按如下方式进行:
定义 typeofX = Type(x)、typeofY = Type(y)
- 若 typeofX 与 typeofY 相同,则
- 若 typeofX 为 Undefined,返回 true
- 若 typeofX 为 Null,返回 true
- 若 typeofX 为 Number,则
- 若 x 为NaN,返回 false
- 若 y 为 NaN,返回 false
- 若 x 与 y 为相等数值,返回 true
- 若 x 为 +0 且 y 为 -0,返回 true
- 若 x 为 -0 且 y 为 +0,返回 true
- 返回false
- 若 typeofX 为 String,则当 x 和 y 为完全相同的字符序列(长度相等且相同字符在相同位置)时返回 true;否则,返回 false
- 若 typeofX 为 Boolean,当 x 和 y 同为 true 或者同为 false 时返回 true;否则,返回 false
- 当 x 和 y 为引用同一对象时返回 true;否则,返回 false
- 若 x 为 null 且 y 为 undefined,返回 true
- 若 x 为 undefined 且 y 为 null,返回 true
- 若 typeofX 为 Number 且 typeofY 为 String,返回 Comparison x == ToNumber(y)
- 若 typeofX 为 String 且 typeofY 为 Number,返回 Comparison ToNumber(x) == y
- 若 typeofX 为 Boolean,返回 Comparison ToNumber(x) == y
- 若 typeofY 为 Boolean,返回 Comparison x == ToNumber(y)
- 若 typeofX 为 String 或 Number,且 typeofY 为 Object,返回 Comparison x == ToPrimitive(y)
- 若 typeofX 为 Object 且 typeofY 为 String 或 Number,返回 Comparison ToPrimitive(x) == y
- 返回 false