首页 > 解决方案 > 为什么空对象不等于 JavaScript 中的空对象?(也是数组)

问题描述

图片

为什么空对象不等于 JavaScript 中的空对象?(也是数组)

const value = {} == {}; // false

标签: javascript

解决方案


以下是原因的快速解释

{} == {}; // 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”。


推荐阅读