== 和 ===
两个等号(==)是相等,三个等号是全等(===)。判断两个变量是否相等在编程中是非常重要的操作,比较字符串、数字等基本数据类型的相等性的时候比较简单,但在比较对象的时候,问题就变得很复杂了。最开始在 ECMAScript 中比较相等或不相等的时候,会把两个对象转成相似的类型。但后来,有人提出质疑: 这种转换是否合理。最后,ECMAScript 的方案是提供了两种操作符 == 和 ===。
相等 ==
比较两个变量是否相等的时候,会判断两者的类型是否相同,如果相同就进行值的比较,值相同则返回 true ,不同返回 false。两者的数据类型不相同的话,就会进行类型转换,转换后来进行值的比较。
类型转换规则如下:
- 如果比较的一方为布尔值,则将布尔值转数值,true 转为 1,false 转为 0
- 如果一方为字符串,另一个操作数为数值时,会把字符串转成数字再进行比较
- 如果其中一个操作数是对象,另一个操作数不是对象,则会把调用对象的 valueOf() 方法转成原始值再进行比较
- 如果两者都输对象,则比较他们是不是同一个对象,同一个对象返回 true,不同则返回 false
- null 和 undefined 返回 true
- NaN 和 NaN 不相等
全等 ===
全等比较,两者类型和值都要相同才会返回 true