ES5对于==的说明

发布时间:2019-08-12 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ES5对于==的说明脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

比较 x == y, x 和 y 是值变量,返回 @L_777_0@ 或者 false.这样的比较判断遵循以下规律:

如果 x 和 y 的类型一致(仅包括Number,String,Null,Undefined,Boolean,Object。Symbol属于ES6)

  1. 如果 x 的类型是 Underfined,返回 true.
  2. 如果 x 的类型是 Null,返回 true.
  3. 如果 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.
  4. 如果 x 的类型是 String,那么除非 x 和 y 的字符顺序完全相同,且长度相等。否则返回 flase.
  5. 如果 x 的类型是 Boolean,如果 x 和 y 都是 true 或 false.否则返回 flase.
  6. 如果 x 和 y 引用自相同 Object,返回 true.

如果 x 为 null 且 y 为 underfined,返回 true.

如果 x 为 underfined 且 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.

除以上情况,全部返回 false.

TIPS

  1. 以下类型转换规则

    • 字符串类型比较可以是: "" + a == "" + b
    • 数字类型比较可以是: +a == +b
    • 布尔类型比较可以是: !a == !b
  2. 以下操作等式结果不变

      1. != B 的结果与 !(A==B) 相同
      1. == B 的结果与 B == A 相同,除了对A和B的判定顺序有区别以外其他等同
  3. 等式操作的传递性并不总是正确的.比如,存在两个含有相同字符的字符串对象;每一个字符串对象都可以被认为等同于该字符,但两个字符串对象并不相等:

    • new String("a") == "a" 与 "a" == new String("a") 结果都为 true.
    • new String("a") == new String("a") 的结果却是 false.
  4. 字符串的比较仅仅是简单的顺序比较每个字符的值。并没有尝试使用更加复杂的,以语义为导向的字符定义或是字符串同性测试或是整理 Unicode 码的定义顺序。因此,仅根据Unicode标准规范,字符串值即可推测为不相等(比如不会比较全角和半角的编码差异)。实际上这个算法推测两端的字符串都已经是普通样式。

脚本宝典总结

以上是脚本宝典为你收集整理的ES5对于==的说明全部内容,希望文章能够帮你解决ES5对于==的说明所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。