JavaScript中的对象具有唯一的标识.通过表达式(如构造函数或文字)创建的每个对象都被视为与其他所有对象不同.
这背后的原因是什么?
{}==={}//output:false
Run Code Online (Sandbox Code Playgroud)
为什么他们被区别对待?是什么让他们彼此不同?
{}创建一个新对象.
当你尝试比较两个独立的新对象(引用)时,它们将永远不会相等.
铺开它:
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)
是对象的不同实例,可以独立进行修改。即使它们(当前)看起来相似,它们也不相同。通过它们的(属性)值进行比较有时会很有用,但是在有状态编程语言中,对象相等性通常是它们的标识。