首页 > web前端 > js教程 > 正文

为什么 == 为 true 但 {} === {} 为 false

聖光之護
发布: 2025-01-19 08:42:29
原创
375人浏览过

为什么 == 为 true 但 {} === {} 为 false

JavaScript 的严格相等运算符 (===) 乍看简单,却暗藏玄机。本文将解释为何 1 === 1 为真,而 {} === {} 为假。

数据类型:基元与对象

理解这一差异的关键在于 JavaScript 如何处理基元类型和对象类型。

基元类型: 包括数字、字符串、布尔值、undefined、null 和 Symbol。使用 === 比较基元时,JavaScript 直接比较其值。1 === 1 为真,因为它们的值相同。

对象类型: 对象存储在堆内存中。每次创建对象,都会分配新的内存地址。=== 比较对象时,比较的是其内存地址,而非内容。{} 和 {} 是两个不同的对象,位于不同的内存地址,因此 {} === {} 为假。

内存与堆:更深入的理解

下图简要说明:

const obj1 = {}; // 内存地址 a
const obj2 = {}; // 内存地址 b

console.log(obj1 === obj2); // false, a !== b

const obj3 = obj1; // obj3 指向与 obj1 相同的内存地址
console.log(obj1 === obj3); // true, 都指向 a
登录后复制

对象是引用类型,比较的是引用(内存地址),而非值。

typeof 运算符

typeof 运算符用于检测数据类型:

console.log(typeof "hello"); // "string"
console.log(typeof 42);       // "number"
console.log(typeof true);     // "boolean"
console.log(typeof undefined);// "undefined"
console.log(typeof null);     // "object" (已知 bug)
console.log(typeof {});       // "object"
console.log(typeof []);       // "object"
console.log(typeof function () {}); // "function"
登录后复制

null 和数组:对象的特殊情况

typeof null 返回 "object" 是 JavaScript 的一个历史遗留问题。数组和函数实际上是对象。

函数:特殊的对象

函数是对象,但拥有 [[call]] 属性,使其可调用。

function greet() {
  console.log("hello!");
}

greet(); // "hello!"
登录后复制

重要性

理解基元和对象的区别至关重要。比较对象内容,需使用深度比较,例如:

const objA = { name: "Alice" };
const objB = { name: "Alice" };

// 浅比较
console.log(objA === objB); // false

// 深比较
const isEqual = JSON.stringify(objA) === JSON.stringify(objB);
console.log(isEqual); // true
登录后复制

结论

1 === 1 为真,因为基元按值比较;{} === {} 为假,因为对象按引用比较。掌握这一区别,有助于编写更健壮的 JavaScript 代码。

以上就是为什么 == 为 true 但 {} === {} 为 false的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号