首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript对象创建/关联性

JavaScript对象创建/关联性
EN

Stack Overflow用户
提问于 2012-10-11 03:06:48
回答 2查看 71关注 0票数 2

有人能解释一下以下代码片段的输出行为吗?

代码语言:javascript
复制
function Vertex(x, y, z) {
    this.x = parseInt(x);
    this.y = parseInt(y);
    this.z = parseInt(z);
};

var set = {};

var v1 = new Vertex(1,2,3);
var v2 = new Vertex(2,3,4);
var v3 = new Vertex(1,2,3);
var v4 = new Vertex(4,5,6);

set[v1] = 10;
set[v2] = 11;


alert(set[v1] + " " + set[v2] + " " + set[v3] + " " + set[v4]);
// Output: 11 11 11 11
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-11 03:12:48

代码语言:javascript
复制
v1 == v2 == v3 == v4 == "[object Object]" when expressed as a string

您不能将对象作为键。

代码语言:javascript
复制
set[v1] is the same as set["[object Object]"]

这就是为什么你会得到所有4个键的最后一个值。

这里的是您重新编写的代码,以便按预期执行

代码语言:javascript
复制
var object_id = 0; /* global object instance id */
function Vertex(x, y, z) {
    this.x = parseInt(x);
    this.y = parseInt(y);
    this.z = parseInt(z);
    this.id = (object_id++); /* add id to object */
};
/* override to string so it can be used as a key */
Vertex.prototype.toString = function() {
    return JSON.stringify(this);
}

var set = {};

var v1 = new Vertex(1,2,3);
var v2 = new Vertex(2,3,4);
var v3 = new Vertex(1,2,3);
var v4 = new Vertex(4,5,6);

set[v1] = 10;
set[v2] = 11;


alert(set[v1] + " " + set[v2] + " " + set[v3] + " " + set[v4]);
票数 1
EN

Stack Overflow用户

发布于 2012-10-11 03:12:03

对象属性是字符串,因此如果您尝试执行set[v1] = 10;v1将被转换为字符串(字符串将为[object Object]),因此本质上您将获得set['[object Object]'] = 10;这将发生在您的所有对象上,并且您设置的每个值都将覆盖先前的值。

所以你的代码等同于这个

代码语言:javascript
复制
function Vertex(x, y, z) {
    this.x = parseInt(x);
    this.y = parseInt(y);
    this.z = parseInt(z);
};

var set = {};

var v1 = new Vertex(1,2,3);
var v2 = new Vertex(2,3,4);
var v3 = new Vertex(1,2,3);
var v4 = new Vertex(4,5,6);

set['[object Object]'] = 10;
set['[object Object]'] = 11;          

alert(set['[object Object]'] + " " + set['[object Object]'] + " " + set['[object Object]'] + " " + set['[object Object]']);
// Output: 11 11 11 11
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12826544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档