javascript - 为什么空对象不等于 JavaScript 中的空对象?(也是数组)
问题描述
为什么空对象不等于 JavaScript 中的空对象?(也是数组)
const value = {} == {}; // false
解决方案
以下是原因的快速解释
{} == {}; // false
[] == []; // false
就像在 JavaScript 中那样工作。
来自 MDN Web 文档 - Working with objects: Comparing objects
.
在 JavaScript 中,对象是一种引用类型。两个不同的对象永远不会相等,即使它们具有相同的属性。只有将相同的对象引用与其自身进行比较才会产生 true。
// Two variables, two distinct objects with the same properties
var fruit = {name: 'apple'};
var fruitbear = {name: 'apple'};
fruit == fruitbear; // return false
fruit === fruitbear; // return false
// Two variables, a single object
var fruit = {name: 'apple'};
var fruitbear = fruit; // Assign fruit object reference to fruitbear
// Here fruit and fruitbear are pointing to same object
fruit == fruitbear; // return true
fruit === fruitbear; // return true
fruit.name = 'grape';
console.log(fruitbear); // output: { name: "grape" }, instead of { name: "apple" }
有关比较运算符的详细信息,请参阅比较运算符。
来自 Eloquent Javascript Book -数据结构:对象和数组
因此,数组只是一种专门用于存储事物序列的对象。如果你评估 typeof [],它会产生“object”。
推荐阅读
- java - 如何在 Mac OS 中从 Java 启动终端
- ruby-on-rails - Solidus ShippingCalculator 错误
- linux - POS 热敏打印机抽屉仅第一次启动
- javascript - 在reduce调用中返回的箭头函数
- python - python:分配并读出二维列表的值
- angularjs - 在数组中禁用 ng-options
- c# - 如何构建包含列表的新对象
作为属性? - python - 尝试使用“django-admin startproject website”在 Django 上启动新项目时出错
- rust - 在 T 和 UnsafeCell 之间转换是否安全且已定义的行为
? - wso2 - 如何修复有关 WSO2-am 2.2.0 数据库的此错误?