Javascript 数组';胶合';初始化时
我在使用几个相关数组时发现了一种疏远效应。在我绞尽脑汁寻找错误之后,我终于找到了解决办法。但我想知道你们中是否有人能解释为什么会发生这种情况 我的代码是这样的:Javascript 数组';胶合';初始化时,javascript,arrays,google-chrome,Javascript,Arrays,Google Chrome,我在使用几个相关数组时发现了一种疏远效应。在我绞尽脑汁寻找错误之后,我终于找到了解决办法。但我想知道你们中是否有人能解释为什么会发生这种情况 我的代码是这样的: var closed =['closed', 'closed', ..., 'closed']; sunday = closed; ... saturday = closed; 在此之后,如果我这样做: sunday[2] = 'open'; 我有星期天开放,星期一开放,星期二开放,星期六开放。这就像所有的变量都被“粘合”或链接,因
var closed =['closed', 'closed', ..., 'closed'];
sunday = closed;
...
saturday = closed;
在此之后,如果我这样做:
sunday[2] = 'open';
我有星期天开放,星期一开放,星期二开放,星期六开放。这就像所有的变量都被“粘合”或链接,因为无论你改变什么,它们都以相同的方式改变
我是这样修复的:
var closed1 =['closed', 'closed', ..., 'closed'];
...
var closed7 =['closed', 'closed', ..., 'closed'];
sunday = closed1;
...
saturday = closed7;
现在我得到了独立变量。但是我不喜欢这个解决方案,所以如果有人知道这个问题,我将不胜感激。
我正在谷歌浏览器上运行JavaScript
谢谢数组是对象,对象是引用类型 每个变量
星期日、星期一、星期二等。
都包含对同一数组的引用,因此每个变量都能够观察到对该数组的更改
看看你的代码,我有一种直觉,也许你应该使用一个对象而不是数组
var closed = {
sunday: 'closed',
monday: 'open',
tuesday: 'open',
wednesday: 'open',
thursday: 'open',
friday: 'open',
saturday: 'closed'
};
只是一种预感。我想我会把它扔出去。问题是,在JavaScript中,对象类型(在您的示例中包括
closed
之类的数组)与实际对象()相关联。这意味着如果x
是一个变量且其值为对象类型,y=x
不会将x
的副本放入y
;它只是意味着可以使用两个名称来引用同一个对象
实际上,您希望在这里创建已关闭的
(“克隆”它)的副本。由于它是一个数组,您可以轻松地使用
sunday = closed.slice(0); // etc
要获取副本而不是原始数组的引用,请使用
切片:
var closed = ['closed', 'closed', ... ];
var sunday = closed.slice();
var monday = closed.slice();
为了强调这一点:在原始版本中只有1个数组具有许多引用。另外,请查看@以防止将来出现问题。。。在Python中也会发生同样的情况?请看一看,您可以在不使用参数的情况下调用slice以获得相同的效果<代码>星期天=closed.slice()代码>所以,我找到了其他方法,比如:sunday=([]).concat(closed);阅读关于“深度复制”的文章,但我是OOP新手,对这些概念不太清楚。我将使用slice()