javascript等于运算符

时间:2013-04-02 15:18:32

标签: javascript

以下代码导致错误的原因是什么?

{} === {}
//false

这段代码变成现实的原因是什么?

 var obj = {};
 obj === obj
  //true

以简洁明了的语言回答

5 个答案:

答案 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。