一. 相等操作符
确定两个变量是否相等是编程中一个非常重要的操作,在最早的ECMAScript
中的相等和不相等操作符会在比较之前,先将对象转化成相似的类型,后来,有人提出了这种转换到底是否合理的质疑。
最后,ECMAScript的解决方案就是提供两组操作符。
注:
ECMAScript规定了JS的语法规范
- 相等(“==”) 与 不相等(“!=”) -------------先转换再比较
- 全等(“===”) 与 不全等(“!==”) ------------- 仅比较不转换
二. 等于和不等于
ECMAScript
中的等于操作符用两个等于号表示(==)表示,如果操作数相等,则会返回true,不相等则返回false。不等于操作符用用一个叹号连接一个等号(!=)表示,如果两个操作数不相等则发返回true,相等的话则返回false,当然在比较前比较数会进行类型转换(通常称为强制类型转换
)再确定操作数是否相等。
一般会有以下几种情况
1. 如果任一操作数是布尔值
如果任一操作数是布尔值,则会将其转换为数值再比较是否相等。fasle转换为0,true转换为1,因此下方的式子是成立的。
console.log(true == 1); // 输出true
console.log(false == 0); // 输出 true
console.log(true != 1); // 输出false
console.log(false != 0); // 输出false
2. 如果一操作数是字符串 另一个是数值
如果一操作数是字符串 另一个是数值,则会尝试将字符串转换为数值,再进行比较,相等的话就输出true不相等的话就输出false,如下面的式子
console.log(5 == "5"); // 输出 true
console.log(6 == "hello"); // 输出false
console.log(5 != "5"); // 输出 false
console.log(6 != "hello"); // 输出 true
3. 如果一操作数是对象 另一个不是
如果一操作数是对象 另一个不是,则调用对象的valueof()方法取得其原始值,再根据上面的规则进行比较,这两个操作符都会遵循以下的规则。
- null和undefined相等
- null和undefined相等不能转换为其他类型的值再进行比较
- 如果有一任操作数是NaN,则相等操作符返回false,不相等操作符返回true。即使两个值都为NaN,相等操作符也会返回 false,按照规则NaN并不等于NaN
- 如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作符都指向同一个对象则相等操作度返回true
下面是一些常见的情况
console.log(null == undefined); // 输出 true
console.log("NaN" = NaN); // 输出false
console.log(5 == NaN); // 输出false
console.log(NaN == NaN); // 输出 fasle
console.log(NaN != NaN); // 输出true
三. 全等与不全等
全等和不全等操作符和相等和不相等操作符类似,只不过它们在比较时不会对操作数进行转换,全等操作符由三个等于号组成(===)表示,只有两个操作数在不转换的前提下相等才会返回true,否则返回false。
而不全等操作符由一个感叹号和两个等于号组成用(!==)表示只有两个数在不转换的前提下不相等才返回true,否则返回false。
所以跟等于和不等于是区别很大的,可以理解为 === 和 !== 需要比较数据类型,如下面示例。
console.log(5 == "5"); // 输出 true
console.log(5 === "5"); // 输出 false
console.log(5 != "5"); // 输出 false 转换后相等
console.log(5 !== "5"); // 输出 true 因为数据类型不同
值得注意的是,虽然null==undefined是true(因为这两个值类似),但是null===undefined是false,因为它们不是相同的数据类型。
四. 小试题
最后给各位读者朋友准备了一些小试题,会用到上面讲解的一些知识,答案我就放在最后了
""==0
" "==0
null == undefined
null == 0
undefined == ""
"false" == false
"false" == 0
NaN == NaN
NaN == false
NaN === false
var a = {}
var b = {}
var c =a
a==b
a===b
a==c
a===c
五. 结尾
本篇博客关于js中的相等操作符就讲解到这里吧,后续本专栏将会更新更多的面试常考点文章,感兴趣的小伙伴可以点个订阅,不定期更新。
""==0 //true
" "==0 //true
null == undefined //true
null == 0 //true
undefined == "" //false
"false" == false //false
"false" == 0 // false
NaN == NaN //false
NaN == false //false
NaN === false //false
var a = {}
var b = {}
var c =a
a==b //false
a===b //false
a==c //true
a===c //true