Javascript 中,相等操作符两等号“==”与三等号 “===” 有什么区别? 先看个例子:
1=="1"
true
1==="1"
false
1、== 基于类型转换的相等
==
是一种基于类型转换的相等,如果两个操作数的类型不同,它会尝试先做类型转换再比较
1、null 与 undefined 相等
null == undefined //true
2、如果一个值是数值,另一个值是字符串,则先把字符串转换为数值再比较
1=="1" // true
3、 如果一个值为true,则转换为1, 如果为false, 则转换为0再比较
true == 1 //true
true == '1' // true true 转换为1 , "1" 转换为 1
false == '0' //true
4、一个值可以转换为另一个值,但并不意味着两者相等,例如:
undefined == false // false , 虽然undefined 转换为布尔值为false, 但是==操作符并不会将undefined转换为false。 只有在if语句中才会转换。
null == false // false 同上
5、如果一个值是对象,另一个是在原始值,则先把对象转换为原始值,对象要么使用toString()
方法 或者 valueOf()
方法转换为原始值再做比较
Number("1") == 1 //true Number("1") 会使用valueOf() 方法转换为数值1再比较
[1] == 1// true 数组[1]使用toString()方法转换为字符串为“1”, 再转换为数值1, 故两者相等。
2、=== 严格相等
===
是一种严格的相等操作符,比较时不做任何类型转换,更加严谨。对于原始值,只有两个值的类型相同而且值相等时才相等。如果是对象,两个值必须引用的是同一个对象才相等,如果引用的不是同一个对象,即使值相同也不相等。实践中应该使用===
来判断两个值是否相等,除非明确知道 ==
不会带来隐患。
true === 1 //false
[1] === 1 //false
let a = [1]
let b = [1]
a === b // false a 和 b 引用两个不同的数组对象
关注公众号「Python之禅」,回复「1024」免费获取Python资源