Javascript对象标识

Mai*_*pal 4 javascript

JavaScript中的对象具有唯一的标识.通过表达式(如构造函数或文字)创建的每个对象都被视为与其他所有对象不同.

这背后的原因是什么?

{}==={}//output:false
Run Code Online (Sandbox Code Playgroud)

为什么他们被区别对待?是什么让他们彼此不同?

Ian*_*Ian 5

{}创建一个对象.

当你尝试比较两个独立的对象(引用)时,它们将永远不会相等.

铺开它:

var a = {};  // New object, new reference in memory, stored in `a`
var b = {};  // New object, new reference in memory, stored in `b`

a === b;  // Compares (different) references in memory
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,{}是一个"捷径" new Object(),更明确地说:

var a = new Object();
var b = new Object();

a === b;  // Still false
Run Code Online (Sandbox Code Playgroud)

也许明确性new可以帮助您理解比较,比较不同的对象.

另一方面,如果引用指向同一个对象,则引用可以相等.例如:

var a = {};
var b = a;

a === b;  // TRUE
Run Code Online (Sandbox Code Playgroud)


Ber*_*rgi 5

是对象的不同实例,可以独立进行修改。即使它们(当前)看起来相似,它们也不相同。通过它们的(属性)值进行比较有时会很有用,但是在有状态编程语言中,对象相等性通常是它们的标识。

  • 如果将其中一个传递给对其进行修改的函数,则另一个不会更改。我只从无状态编程语言中知道(默认)按值相等。 (2认同)