资讯专栏INFORMATION COLUMN

ES5对于==的说明

nanfeiyan / 2475人阅读

摘要:比较和是值变量返回或者这样的比较判断遵循以下规律如果和的类型一致仅包括。因此,仅根据标准规范,字符串值即可推测为不相等比如不会比较全角和半角的编码差异。实际上这个算法推测两端的字符串都已经是普通样式。

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

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

如果 x 的类型是 Underfined,返回 true.

如果 x 的类型是 Null,返回 true.

如果 x 的类型是 Number,那么:

如果 x 是 NaN,那么返回 false.

如果 y 是 NaN,那么返回 false.

如果 x 和 y 的值相等,那么返回 true.

如果 x 是 +0 且 y 的值是 -0,返回 true.

如果 x 是 -0 且 y 的值是 +0,返回 true.

其他情况返回 false.

如果 x 的类型是 String,那么除非 x 和 y 的字符顺序完全相同,且长度相等。否则返回 flase.

如果 x 的类型是 Boolean,如果 x 和 y 都是 true 或 false.否则返回 flase.

如果 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

以下类型转换规则

字符串类型比较可以是: "" + a == "" + b

数字类型比较可以是: +a == +b

布尔类型比较可以是: !a == !b

以下操作等式结果不变

!= B 的结果与 !(A==B) 相同

== B 的结果与 B == A 相同,除了对A和B的判定顺序有区别以外其他等同

等式操作的传递性并不总是正确的.比如,存在两个含有相同字符的字符串对象;每一个字符串对象都可以被认为等同于该字符,但两个字符串对象并不相等:

new String("a") == "a" 与 "a" == new String("a") 结果都为 true.

new String("a") == new String("a") 的结果却是 false.

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90309.html

相关文章

  • JavaScript 对象所有API解析

    摘要:创建对象的两种方式推荐该构造器可以接受任何类型的参数,并且会自动识别参数的类型,并选择更合适的构造器来完成相关操作。比如二的成员该属性指向用来构造该函数对象的构造器,在这里为该方法返回的是一个用于描述目标对象的字符串。 之前看到【深度长文】JavaScript数组所有API全解密和JavaScript字符串所有API全解密这两篇高质量的文章。发现没写对象API解析(估计是博主觉得简单,...

    SmallBoyO 评论0 收藏0
  • 零基础前端开发初学者应如何系统地学习?

    摘要:在有了基础之后,进一步学习内容包括框架。前端学习交流群禁止闲聊,非喜勿进。代码提交前必须做的三个事情检查所有变更跑一边单元测试手动运行一遍所有 网站开发开发大致分为前端和后端,前端主要负责实现视觉和交互效果,以及与服务器通信,完成业务逻辑。其核心价值在于对用户体验的追求。可以按如下思路学习系统学习: 基础知识: html + css 这部分建议在 w3school 在线教程上学习,边...

    JouyPub 评论0 收藏0
  • 零基础前端开发初学者应如何系统地学习?

    摘要:在有了基础之后,进一步学习内容包括框架。前端学习交流群禁止闲聊,非喜勿进。代码提交前必须做的三个事情检查所有变更跑一边单元测试手动运行一遍所有 网站开发开发大致分为前端和后端,前端主要负责实现视觉和交互效果,以及与服务器通信,完成业务逻辑。其核心价值在于对用户体验的追求。可以按如下思路学习系统学习: 基础知识: html + css 这部分建议在 w3school 在线教程上学习,边...

    funnyZhang 评论0 收藏0
  • package.json文件各字段说明

    摘要:字段由脚本命令组成的字典,这些命令运行在包的各个生命周期中。在打包过程中,如果遇到字段会优先使用字段表示的路径下的文件,如果不存在,则用字段表示的作为入口,并按照的规范打包。其中还分析了文件中字段和字段的不同以及和两个字段的区别。 所有用npm下载的包或者要上传至npm的模块都会有一个package.json文件,这个文件总是存在于模块(或者包)的根目录下,这个文件到底是干嘛的,现在就...

    yzd 评论0 收藏0
  • ES5和ES6中变量声明提升

    摘要:结论对于中所说的变量声明提前,更准确的说法是变量定义声明提前了,更准确的理解是定义声明处于程序运行的第一个阶段导致相较于赋值声明的第二阶段有了前提的效果。 ES5和ES6中的变量声明提升 Example1: a=2; var a; console.log( a ); //结果为2 Example2: console.log( a ); //结果是undefined var a=...

    APICloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<