js === 和 == 的区别

本文详细解析了JavaScript中基本类型与对象类型的比较规则,包括值比较与地址比较的区别,以及不同数据类型间的比较结果解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



如果是基本类型
var a=5;
var b=5;
a===b 的结果是true
a==b 的结果是true

var a=”qq”;
var b=”qq”;
a===b 和 a==b 的结果相同

true === true 和 true ==true 的结果相同
false === false 和 false == false 的结果相同


下面是对象类型的比较
var xiaoming = {name:'xiaoming', age:15};
var xiaoming2 = {name:'xiaoming', age:15};
xiaoming == xiaoming2 的结果是false ,值是一样的,为什么比较的时候是false呢? 因为xiaoming存的是一个对象的地址,xiaoming2存的也是对象的地址,它们两个地址空间一定不同,这是比较地址空间,所以为false
xiaoming === xiaoming2 结果是false ===本来就是比较地址

var xiaoming = {name:'xiaoming', age:15};
var xiaoming2 =xiaoming;
xiaoming == xiaoming2 为true; 两个变量引有一个地址
xiaoming === xiaoming2 为true; 两个变量引有一个地址

总结:基本类型都是值的比较所以没有区别,引有类型都是地址的比较所以没有区别。


现在我们看下它们的不同
如果是基本类型
“5” === 5 结果是false 为什么呢?因为类型不同,说明不是一个地址
“5”==5 结果是 true 为什么呢? 因为 “5”在比较前会ValueOf()为Number型,他们两个值是相等的,所以为true

null === undefined 结果为false 为什么呢? 因为类型不同,说明不是一个地址
nul == undefined 结果为true 为什么呢?他们两个值是相等的

“1” === true 结果是false, 一定是false没有疑问
“1” == true 结果为true 为什么呢?"1"为ValueOf()为1,true的值也为转化为1 ,所以值相等

var xiaoming = {name:'xiaoming', age:15};
var age = 15;
xiaoming.age == age; 结果是true 值比较
xiaoming.age === age;结果为true 地址比较 //我们以前对象的属性和变量是没有区别的,这里其实还是基本类型比较基本类型

总结:值比较用尽量用== 地址比较用尽量用===

题外话: NaN == NaN 为false NaN === NaN为false ,为什么有这种情况呢? NaN的意思是not a Number 不是一个数,所以不能比较
如果要判断一个变量是不是一个数用isNaN()函数
var a= 5;
isNaN(a); //这里应该是false,因为a是一个数,不是数的时候才是true

### JavaScript 中 `==` `===` 运算符的区别 在 JavaScript 中,`==` 被称为抽象相等运算符,而 `===` 则被称为严格相等运算符。两者的差异主要体现在类型转换上。 当使用 `==` 比较两个值时,如果它们的类型不同,则会尝试进行隐式的类型转换再做比较[^1]。这意味着,在某些情况下,即使数值相同但数据类型不同的变量也会被认为是相等的。例如: ```javascript console.log(0 == ""); // 输出: true console.log('0' == 0); // 输出: true ``` 相比之下,`===` 不仅检查值是否相等,还会验证这两个操作数的数据类型是否一致。只有当两者都匹配时才会返回 `true`;否则就返回 `false`[^2]。因此下面的例子都会得到 `false` 的结果: ```javascript console.log(0 === ""); // 输出: false console.log('0' === 0); // 输出: false ``` 对于不等于的情况也存在类似的差别:`!=` 只关心最终计算后的值而不考虑原始类型的差异,但是 `!==` 同样会在检测到不同类型的情况下立即判定为假并给出相应的布尔值响应[^3]。 为了编写更清晰、可预测性强以及错误率更低的代码,建议尽可能多地采用严格的比较方式即 `===` 来代替宽松版本 `==`[^4]。 #### 实际应用中的例子 这里有一个简单的函数用来展示这两种运算符的行为: ```javascript function compareValues(a, b) { console.log(`Using '==' : ${a == b}`); console.log(`Using '===': ${a === b}\n`); } compareValues(5, "5"); // Using '==' : true // Using '===': false compareValues(true, 1); // Using '==' : true // Using '===': false compareValues(null, undefined); // Using '==' : true // Using '===': false ``` 通过上述实例可以看出,在处理可能涉及多种数据类型的场景下,选择合适的相等性判断方法是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值