Javascript对象的计算属性

时间:2019-09-05 06:50:33

标签: javascript

能否请您解释一下下面的代码中发生了什么?为什么两个表达式都具有相同的值?

let a = {};

let b = {
    value: 'b'
};

let c = {
    value: 'c'
};

a[b]=123;
a[c]=456;

console.log(a[b], a[c]); // ==> 456 456

欢迎访问学习材料的任何链接

4 个答案:

答案 0 :(得分:3)

对象键只能是字符串。将 object 放在计算属性中时,它将被字符串化为a[b],因此a[c]a['[object Object]']let a = {}; let b = { value: 'b' }; let c = { value: 'c' }; a[b]=123; a[c]=456; console.log(a);相同。

[object Object]

因此,对const a = new Map(); let b = { value: 'b' }; let c = { value: 'c' }; a.set(b, 123); a.set(c, 456); console.log(a.get(b)); console.log(a.get(c));键的最后分配456将覆盖先前的123分配(并且结果对象仅具有一个键)。

如果您想安全地将对象用作“键”,请改用Map,其键可以是任何类型,而不仅仅是字符串:

Event

答案 1 :(得分:0)

非常简单:

完成时

a

您将对象设置为属性名称toString()

问题是,属性名称是一个字符串,因此在bc(它们是对象)上调用let a = {}; let b = { value: 'b' }; let c = { value: 'c' }; a[b]=123; a[c]=456; console.log(a[b], a[c]); // ==> 456 456 console.log(a);,它们的值相同。你明白了吗?

{{1}}

答案 2 :(得分:0)

a[b] = //...表达式中,b被强制转换为字符串-转换的结果是字符串"[object Object]"。它与c的值相同。

let a = {};

let b = {
    value: 'b'
};

let c = {
    value: 'c'
};

a[b]=123;
a[c]=456;

console.log(b.toString());
console.log(c.toString());

console.log(a);

答案 3 :(得分:0)

因为对象的键可以是字符串,并且您试图将一个对象分配为键,所以js将对象类型转换为字符串,并且键对于这两个对象都成为[对象对象]。这就是为什么针对同一键更新值的原因。