JavaScript中的 == 和 === 的区别

本文详细解析了JavaScript中的==与===运算符的区别。==仅比较值,不考虑数据类型,而===同时比较值和类型。文章通过实例展示了两者的具体用法,包括对null、undefined和NaN的特殊处理。

== 和 === 的区别

1、相同点:都属于JavaScript中的比较运算符,是对两个变量进行比较,结果要么是true,要么是false。

2、不同点:
(1)== 等于
只比较值,不比较数据类型
不论数据类型,只看数值是否相等

console.log(1== 1);
在控制台输出的结果为 true

console.log(1 == '1');
在控制台输出的结果也为 true

(2)=== 全等
值和数据类型都需要比较
必须数据类型和值都要相同时,才会为true

console.log(1 === 1);
在控制台输出的结果为 true

console.log(1 === '1');
在控制台输出的结果为 false

不同的原因:
console.log(typeof(1));
检查数据类型: 1 数据类型为 number

console.log(typeof('1'));
检查数据类型: '1' 数据类型为 string

因为 === 全等需要比较值和数据类型的,两者任一条件不满足则就不会是全等

3、== 和 === 中的注意点:
(1)== 等于
① 如果两个值类型不同,也有可能相等
若一个是null,一个是 undefined,那么结果是相等的
② 如果其中至少一个是NaN,那么就不相等

console.log( null == undefined);
在控制台输出的结果为 true

console.log( NaN == NaN);
在控制台输出的结果为 false

(2)=== 全等于
① 若一个是null,一个是 undefined,那么结果是不相等的
因为null的数据类型是object,而undefined的数据类型是undefined,显然两个虽然都表示空,但是还是不全等的。

console.log( null === undefined);
在控制台输出的结果为 false

console.log(typeof(null));
在控制台输出的数据类型是 object

console.log(typeof(undefined));
在控制台输出的数据类型是 undefined

② 如果两个值都是null,或是undefined,那么全等

console.log( null === null);
在控制台输出的结果为 true

console.log( undefined === undefined);
在控制台输出的结果为 true

③ 若其中至少一个是NaN,那么结果也是不相等
NaN :表示不是一个数字。
需要注意的是,NaN是JavaScript 中唯一 一个自身不相等的存在!
另外:判断一个值是否是NaN,只能使用 isNaN( ) 来判断。

console.log(typeof(NaN));
在控制台输出的数据类型是 number

console.log( NaN === NaN);
在控制台输出的结果为 false

JavaScript 中,双等号(==三等号(===)都是用于比较两个值的运算符,但它们在比较规则上存在显著差异。 双等号(==)在进行比较时会进行类型转换。这意味着当比较的两个值类型不同时,JavaScript 会尝试将它们转换为相同的类型,然后再进行值的比较。这种类型转换可能会导致一些意外的结果。例如,`null == undefined` 会返回 `true`,因为在双等号比较中,`null` `undefined` 被视为相等 [^1][^2]。 三等号(===)则不进行类型转换,它要求比较的两个值既要相等,又要类型相同。只有当两个值的类型值都完全一致时,`===` 才会返回 `true`。例如,`null === undefined` 会返回 `false`,因为 `null` `undefined` 是不同的类型 [^1]。 以下是一些具体的示例代码,展示了双等号三等号在不同数据类型比较时的差异: ```javascript // 基本数据类型比较 const a = 'malinshu'; const b = 'malinshu'; console.log(a === b); // true console.log(a == b); // true const num1 = 111; const num2 = 111; console.log(num1 == num2); // true console.log(num1 === num2); // true const b1 = true; const b2 = true; console.log(b1 == b2); // true console.log(b1 === b2); // true console.log(null === undefined); // false console.log(null == undefined); // true // 引用类型比较 const obj1 = {}; const obj2 = {}; console.log(obj1 === obj2); // false console.log(obj1 == obj2); // false const arr1 = [1, 2]; const arr2 = [1, 2]; console.log(arr1 === arr2); // false console.log(arr1 == arr2); // false const fun1 = () => {}; const fun2 = () => {}; console.log(fun1 == fun2); // false console.log(fun1 === fun2); // false ``` 综上所述,为了避免类型转换带来的意外结果,并提高代码的可读性安全性,推荐在 JavaScript 中使用三等号(===)进行比较 [^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值