JavaScript中两个独立声明的同值原始变量使用===比较为什么返回true
JS全等运算返回true的原因
核心差异在于JS的===运算符对不同类型的变量采用不同的比较规则:
- 对于原始类型(Number、String、Boolean、null、undefined、Symbol、BigInt):直接对比变量存储的值本身,只要值相同就返回true,和变量的声明方式、内存存储位置无关。
- 对于引用类型(Object、Array、Function等):对比的是变量指向的内存地址,只有两个变量指向堆内存中的同一个对象时才会返回true。
你遇到的场景中,数字5是Number类型的原始值,因此两个独立声明的变量只要存储的数值都是5,===对比就会返回true,你之前的误解是把引用类型的比较规则套用到了原始类型上。
可以参考引用类型的反例辅助理解:
const arr1 = [1,2,3] const arr2 = [1,2,3] console.log(arr1 === arr2) // 输出 false,两个数组都是独立创建的引用类型,内存地址不同
你能理解的第二种赋值场景,本质是把abc存储的内容直接赋值给bcd:如果是原始类型就是拷贝值,引用类型就是拷贝内存地址,所以不管哪种类型这么写===都会返回true,你的原有理解是正确的。
内容的提问来源于stack exchange,提问作者Shivam Gupta
相关产品推荐
相关产品推荐

