Javascript 为什么{key:“value”与{key:“value”不同?

Javascript 为什么{key:“value”与{key:“value”不同?,javascript,object,Javascript,Object,直接从节点REPL: > d1 = {key : "value"} { key: 'value' } > d2 = {"key" : "value"} { key: 'value' } > d1 == d2 false 为什么d1和d2不同?事实并非如此,如果你只是用d2而不是d1重复第一行,你会得到相同的结果。但是,您正在创建的两个对象是不同的对象,因此它们不是==使用对象引用检查两个操作数是否引用(规范的)同一对象。这里有两个对象,它们都有一个名为key的属性,其值为“v

直接从节点REPL:

> d1 = {key : "value"}
{ key: 'value' }
> d2 = {"key" : "value"}
{ key: 'value' }
> d1 == d2
false

为什么d1和d2不同?

事实并非如此,如果你只是用
d2
而不是
d1
重复第一行,你会得到相同的结果。但是,您正在创建的两个对象是不同的对象,因此它们不是
=
<代码>=使用对象引用检查两个操作数是否引用(规范的)同一对象。这里有两个对象,它们都有一个名为
key
的属性,其值为“value”。

事实并非如此,如果您只是用
d2
而不是
d1
重复第一行,就会得到相同的结果。但是,您正在创建的两个对象是不同的对象,因此它们不是
=
<代码>=使用对象引用检查两个操作数是否引用(规范的)同一对象。这里有两个对象,它们都有一个名为
key
的属性,值为“value”。

因为它们是两个不同的对象。它不是比较对象的成员。

因为它们是两个不同的对象。它不是比较对象的成员。

它们不是同一个对象。您正在进行引用相等比较,而不是值比较。

它们不是同一个对象。您正在进行引用相等比较,而不是值比较。

如何进行值比较?@João:对于通用对象,没有内置的内容。你必须滚动你自己的函数。我认为大多数人倾向于将该函数称为
equals
,例如
d1.equals(d2)
,这个名称来自于其他基本上不相关的Java编程语言。我如何进行值比较?@João:对于通用对象,没有内置的。你必须滚动你自己的函数。我认为大多数人倾向于将该函数称为
equals
,例如
d1.equals(d2)
,这是一个来自于其他基本上不相关的Java编程语言的名称。@João Pinto Jerónimo,但是字符串在比较中使用“==”和“!=”运算符进行特殊处理-普通对象是不同的。@Pointy:,大多数字符串都是原语,但您很正确,即使
String
实例的处理方式也与其他对象不同。
Number
实例也是如此@João-请务必阅读链接的详细信息。@João Pinto Jerónimo但是字符串在比较中使用“==”和“!=”运算符进行了特殊处理-普通对象是不同的。@Pointy:嗯,大多数字符串都是原语,但是您很正确,即使是
String
实例的处理方式也与其他对象不同。
Number
实例也是如此@João-请务必阅读链接的详细信息。