以下代码导致错误的原因是什么?
{} === {}
//false
这段代码变成现实的原因是什么?
var obj = {};
obj === obj
//true
以简洁明了的语言回答
答案 0 :(得分:3)
对象的比较不检查对象是否具有相同的内容,它们检查它们是否是同一个对象。每个{}
都会创建一个新对象。您的第一个测试用于测试新对象是否与另一个新对象相同的对象。您的第二个测试将创建的对象与自身进行比较。
来自documentation for comparison operators:
如果操作数引用相同的对象
,则仅对比对象的表达式才为真
或者,来自language specification:
步骤7:如果x和y引用同一个对象,则返回true。否则,返回false。
答案 1 :(得分:1)
在第一种情况下,您将创建两个对象并进行比较。 在第二种情况下,您正在比较同一个对象。
答案 2 :(得分:0)
执行{}
时,您正在创建一个(空)对象文字(没有属性的新对象)。当你在做什么
{} === {}
您要比较两个完全不同的对象,因此返回false
。
但是,当你这样做时:
var obj = {};
obj === obj
您正在比较相同的对象,因此返回true
。
答案 3 :(得分:0)
第二,你将对象与自身进行比较,这是非常逻辑的。
首先你不是在比较相同的东西,你试图比较显示相同的东西。
答案 4 :(得分:0)
{}创建一个新对象。
===检查它们实际上是同一个对象。虽然它们都是新的空对象,但它们实际上是不同的空对象。
要了解其重要性,请尝试以下方法:
var a = {};
var b = {};
var c = a;
a.key = 'value';
console.log(b);
console.log(c);
你会看到因为a和b是不同的空对象,所以改变a不会改变b。 因为c实际上是与a相同的空对象,所以将某些东西放入a中也会将其放入c。