读书人

详解一下子 javascript 中的比较

发布时间: 2013-09-25 11:02:58 作者: rapoo

详解一下 javascript 中的比较

代码1:

  1. [] == []; // false
  2. [] === []; // false
  3. {} == {}; // SyntaxError: Unexpected token ==
  4. {} === {}; // SyntaxError: Unexpected token ===

代码2:

  1. var n0 = 123;
  2. var n1 = new Number(123);
  3. var n2 = new Number(123);
  4. var n3 = Number(123);
  5. var n4 = Number(123);
  6. n0 == n1; // true
  7. n0 == n3; // true
  8. n0 === n1; // false
  9. n0 === n3; // true
  10. n1 == n2; // false
  11. n1 === n2; // false
  12. n1 == n3; // true
  13. n1 === n3; // false
  14. n3 == n4; // true
  15. n3 === n4; // true

为什么会是这个结果?详解一下子 javascript 中的比较

我们需要仔细的阅读规范: http://ecmascript.cn/#203

11.9.3 抽象相等比较算法

比较运算 x==y, 其中 xy 是值,产生 true 或者 false。这样的比较按如下方式进行:

  1. Type(x)Type(y) 相同, 则
    1. Type(x)Undefined, 返回 true
    2. Type(x)Null, 返回 true
    3. Type(x)Number, 则
      1. xNaN, 返回 false
      2. yNaN, 返回 false
      3. xy 为相等数值, 返回 true
      4. x+0y?0, 返回 true
      5. x?0y+0, 返回 true
      6. 返回 false
    4. Type(x)String, 则当 xy 为完全相同的字符序列(长度相等且相同字符在相同位置)时返回 true。 否则, 返回 false详解一下子 javascript 中的比较
    5. Type(x)Boolean, 当 xy 为同为 true 或者同为 false 时返回 true。 否则, 返回false
    6. xy 为引用同一对象时返回 true。否则,返回 false
  2. xnullyundefined, 返回 true
  3. xundefinedynull, 返回 true
  4. Type(x)NumberType(y)String, 返回 comparison x == ToNumber(y) 的结果。
  5. Type(x)StringType(y)Number
  6. 返回比较 ToNumber(x) == y 的结果。
  7. Type(x)Boolean, 返回比较 ToNumber(x) == y 的结果。
  8. Type(y)Boolean, 返回比较 x == ToNumber(y) 的结果。
  9. Type(x)StringNumber,且 Type(y)Object,返回比较 x == ToPrimitive(y) 的结果。
  10. Type(x)ObjectType(y)StringNumber, 返回比较 ToPrimitive(x) == y 的结果。
  11. 返回 false

注:按以上相等之定义:

读书人网 >JavaScript

热点推荐