JS== 和 ===区别,分别在什么情况使用
==操作符
它会比较不同类型的操作数,并尝试强制类型转换。
1.如果操作数具有相同的类型,则按如下方式进行比较:
- 对象(Object):仅当两个操作数引用同一个对象时返回
true
。 - 字符串(String):只有当两个操作数具有相同的字符且顺序相同时才返回
true
。 - 数值(Number):如果两个操作数的值相同,则返回
true
。+0
和-0
被视为相同的值。如果任何一个操作数是NaN
,返回false
;所以,NaN
永远不等于NaN
。 - 布尔值(Boolean):仅当操作数都为
true
或都为false
时返回true
。 - 大整形(BigInt):仅当两个操作数值相同时返回
true
。 - 符号(Symbol):仅当两个操作数引用相同的符号时返回
true
2.如果其中一个操作数为 null
或 undefined
,另一个操作数也必须为 null
或 undefined
以返回 true
。否则返回 false
3.如果其中一个操作数是对象,另一个是基本类型,按此顺序使用对象的 valueOf()
和 toString()
方法将对象转换为基本类型。(这个基本类型转换与相加中使用的转换相同。)
4.两个都为简单类型,字符串和布尔值都会转换成数值,再比较
valueOf()
JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身
Array:返回数组对象本身。
Boolean: 返回布尔值
Date:存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function: 返回函数本身。
Number: 返回数字值。
Object:返回对象本身。这是默认情况。
String:返回字符串值。
Math 和 Error 对象没有 valueOf 方法。
Object.prototype.toString()
toString()
方法返回一个表示该对象的字符串
===操作符
会先判断类型,如果类型不一样就直接返回false
但在比较null
的情况的时候,我们一般使用相等操作符==
const obj = {};
if(obj.x == null){
console.log("1"); //执行
}
等同于下面写法
if(obj.x === null || obj.x === undefined) {
...
}
使用相等操作符(==)的写法明显更加简洁了
所以,除了在比较对象属性为null
或者undefined
的情况下,我们可以使用相等操作符(),其他情况建议一律使用全等操作符(=)