面试常考 | js中你不知道的相等操作符

一. 相等操作符

确定两个变量是否相等是编程中一个非常重要的操作,在最早的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值