== 和 ===

== 和 ===

一、等于操作符

等于操作符用两个等号(==)表示,当操作数相等时,会返回true。
等于操作符在比较中会先进行类型转化,再确定操作数是否相等。

//如果操作数是bool值,则将其转换为数字再比较是否相等。
let result1 = (true == 1);// true

//如果一个操作数是字符串,另一个操作数是数值,则将字符串转换为数值再比较。
let result2 = ("55" == 55); // true

//如果一个操作数是对象那个,另一个不是,则调用对象的valueOf()方法取得其原始值,再根据前面的规则进行比较
let obj = {valueOf: function(){return 1}};
let result3 = (obj == 1); // true

//null和undefined是相等的
let result4 = (null == undefined); // true

//如果任一操作数是NaN,则相等操作符返回false
let result5 = (NaN == NaN); // false

//如果两个操作数都是对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回true。
let obj1 = {name:"xxx"};
let obj2 = {name:"xxx"};
let result6 = (obj1 ==obj2); // false

小结:

  • 两个都为简单类型,字符串和bool值都会转换成数值,再比较。
  • 简单类型与引用类型比较,对象转化成其原始类型的值,再比较。
  • 两个都为引用类型,则比较他们是否指向同一个对象。
  • null和undefined相等。
  • 存在NaN则返回false。

二、全等操作符

全等操作符由三个等号(===)表示,只有两个操作数在不转换的前提下相等才返回true,要求类型和值都相同。

let result1 = ("55" === 55); // false,不相等,因为数据类型不相同。
let result2 = (55 === 55); // true ,相等,数据类型和值都相同。

//null和undefined都与其自身严格相等。
let result3 =(null === null); // true
let result3 =(undefined === undefined); // true

三、区别

相等操作符( == )会做类型转换而后进行值的比较,全等操作符( === )不会。
null和undefined在相等操作符下是相等的,在全等操作符下是不相等的。

四、总结

相等运算符发隐藏类型转换会在一些情况下导出反直觉的结果。

'' == '0' // false
0 == '' // true
0 == '0' // true

false == 'false' // false
false == '0' // true

false == undefined // false
false == null // false
null == undefined // true

' \t\r\n' == 0 // true

在比较null的情况时,一般使用相等操作符。

const obj = {};
if(obj.x == null){
 console.log("1"); //执行
}
//等同于下面的写法
if(obj.x === null || obj.x === undefined) {
 ...
}

使用相等操作符的写法更加简洁。在比较对象的属性为null或者undefined的情况下用相等操作符,其余情况都用全等操作符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值