Javascript 为什么要将对象键转换为“[对象]”?

Javascript 为什么要将对象键转换为“[对象]”?,javascript,Javascript,此代码: var a = {}, b = {key:'b'}, c = {key:'c'}; a[b] = 111; a[c] = 222; console.log(a[b]); 产出:222而不是111 说明: b和c都将转换为[对象] 有人能解释一下为什么会这样吗?当您使用对象作为键时-例如,对象b通过toString方法转换为字符串。键始终转换为字符串,然后对象a中只有一个键-它将是[object] 您应该设置唯一的关键点,如下所示 变量a={}; var b={ke

此代码:

var a = {},
    b = {key:'b'},
    c = {key:'c'};

a[b] = 111;
a[c] = 222;

console.log(a[b]);
产出:222而不是111

说明:

b和c都将转换为[对象]

有人能解释一下为什么会这样吗?

当您使用对象作为键时-例如,对象b通过toString方法转换为字符串。键始终转换为字符串,然后对象a中只有一个键-它将是[object]

您应该设置唯一的关键点,如下所示 变量a={}; var b={key:'b'}; var c={key:'c'}; a[b.key]=111; a[c.key]=222; 控制台loga.b; 控制台loga.c 当您使用对象作为键时,例如,对象b将通过toString方法转换为字符串。键始终转换为字符串,然后对象a中只有一个键-它将是[object]

您应该设置唯一的关键点,如下所示 变量a={}; var b={key:'b'}; var c={key:'c'}; a[b.key]=111; a[c.key]=222; 控制台loga.b; 控制台loga.c [object object]只是对象的字符串表示形式,即调用b.toString或c.toString的结果

对象键始终是字符串,因此当您说:

a[b]
JS将找到b[object]的字符串表示形式,并使用它。与c相同。

[object object]只是对象的字符串表示形式,即调用b.toString或c.toString的结果

对象键始终是字符串,因此当您说:

a[b]

JS将找到b[object]的字符串表示形式,并使用它。与c相同。

这里您指的是对象a和b,但不是返回一个完整的对象及其键和值,而是返回一个字符串,表示[object…-它是object…-object]-类型的对象。它可以是[对象函数],[对象编号]等等。。。 这里你得到了两次[object],所以你覆盖了这个键

如果你愿意写:

a[c] = 222;
a[b] = 111;

输出将是:111

这里您指的是对象a和b,但它不是返回一个带有键和值的整个对象,而是返回一个字符串,表示[object…-它是object…-object]-类型的对象。它可以是[对象函数],[对象编号]等等。。。 这里你得到了两次[object],所以你覆盖了这个键

如果你愿意写:

a[c] = 222;
a[b] = 111;

输出为:111

您能举例说明我们使用[object Function]或[object Number]时的情况吗?感谢Ramziddin.var toString=Object.prototype.toString;toString.call123;toString.callalert;它主要用于获取对象的类型。函数typeobj{return-toString.callobj.slice8,-1;}完整代码如下:var-toString=Object.prototype.toString;var isArr=Array.isArray | |函数isArrayPollyfilobj{return toString.callobj.slice8,-1==Array;};函数getTypeobj{return isArrobj?array:typeof obj;}当我们使用[object function]或[object Number]时,您能举个例子吗?感谢Ramziddin.var toString=Object.prototype.toString;toString.call123;toString.callalert;它主要用于获取对象的类型。函数typeobj{return-toString.callobj.slice8,-1;}完整代码如下:var-toString=Object.prototype.toString;var isArr=Array.isArray | |函数isArrayPollyfilobj{return toString.callobj.slice8,-1==Array;};函数getTypeobj{return isArrobj?array:typeof obj;}感谢所有的答案。我终于明白了原因。对象有三种类型:对象、数组、日期。所以,[object object]的意思是它是一个对象,它的类型是object。谢谢所有的答案。我终于明白了原因。对象有三种类型:对象、数组、日期。所以,[对象对象]只是意味着它是一个对象,它的类型是object。