javascript数组对象

javascript数组对象,javascript,Javascript,var transitionInitial={property:“none”}; var规则=[“颜色”、“背景色”]; var转换=[]; for(var k=0;k

var transitionInitial={property:“none”};
var规则=[“颜色”、“背景色”];
var转换=[];
for(var k=0;k

为什么在第二次迭代转换[0]时,属性等于“背景色”?

它可能与此有关吗<代码>用于(var k=0;k
尝试更改计时器。

因为您存储的是对transitionInitial的引用,而不是它的副本
transitionInitial
指向内存中的一个对象,您正在
transitions[k]
中存储对该对象的引用。无论你在哪一次迭代中,你总是在改变同一个对象。

这是因为你的
变换
数组中的两个值都指向同一个对象。在代码执行过程中,您会生成一个具有三个不同引用的对象(
transitionInitial
transitions[0]
,&
transitions[1]

在循环的第一次迭代期间,
transitions[0]
被设置为引用
transitionInitial
对象。然后将该对象的
属性设置为值
“color”
。在第二次迭代期间,
transitions[1]
被设置为引用与
transitionInitial
transitions[0]
相同的对象。然后将
属性的值重置为
“背景色”

要解决此问题,请为每个数组索引创建不同的对象:

// Not needed anymore:
// var transitionInitial = {property: "none"};
var rules = ["color", "background-color"];
var transitions = [];
for ( var k = 0; k < rules.length; k++) {
  transitions[k] = {};
  transitions[k].property = rules[k];
  alert(transitions[0].property);
}​
//不再需要:
//var transitionInitial={property:“none”};
var规则=[“颜色”、“背景色”];
var转换=[];
for(var k=0;k
// Not needed anymore:
// var transitionInitial = {property: "none"};
var rules = ["color", "background-color"];
var transitions = [];
for ( var k = 0; k < rules.length; k++) {
  transitions[k] = {};
  transitions[k].property = rules[k];
  alert(transitions[0].property);
}​