更新对象属性,最初设置为未定义的数组元素

时间:2016-01-13 15:35:55

标签: javascript

var A = [];

var obj = {
    x: A[1],
    y: 'hello'
};

A[1] = 1;

console.log(JSON.stringify(obj)); // {"y":"hello"}

当我在obj中使用console.log()时,A[1]已经定义。

如何获取“最新”obj,并更新其所有属性?这样我们在{"x":1,"y":"hello"}时会得到console.log()

4 个答案:

答案 0 :(得分:3)

A[1] = 1;实际上是在已经构建obj时定义的。因此,obj.x始终为undefined



var A = [];
A[1] = 1;
var obj = {
  x: A[1],
  y: 'hello'
};
document.body.textContent = JSON.stringify(obj);




答案 1 :(得分:3)

您正在获取最新的对象。如果您希望x属性更新,因为它的指定值会在代码的运行时间内发生变化,您需要使用一个对象,因为它将会只需存储对它的引用,并且随着内存中的位置发生变化,您将在分配的任何位置看到这些更改。数组被视为对象,因此您只需将A指定给x

var A = [];

var obj = {
    x: A,
    y: 'hello'
};

A[1] = 1;

alert(JSON.stringify(obj));

使用对象作为值的另一个示例:

var A = [];
var B = {};
A[1] = B;

var obj = {
    x: A[1],
    y: 'hello'
};

B.z = 1;

alert(JSON.stringify(obj));

答案 2 :(得分:3)

假设您希望obj.x的值为原语:

无法将var的引用分配给obj.x。您可以将obj.x作为一个函数来获取该 var variable= 2 var obj = { x: function() { return variable; }, y: 'hello' }; variable = 5; console.log(obj.x()); //prints 5 的最新值变量

matplotlib

答案 3 :(得分:0)

Javascript对象不会通过引用重新初始化。 您需要执行obj.x = 1来更新对象。