数组在初始化时"胶合"

Osc*_*rra 3 javascript arrays google-chrome

当我使用几个相关的数组时,我发现了一种异化效应.在打破我的心灵寻找错误后,我终于找到了解决方案.但我想知道你们中是否有人能解释我为什么会这样.

我的代码是这样的:

var closed =['closed', 'closed', ..., 'closed'];
sunday = closed;
...
saturday = closed;
Run Code Online (Sandbox Code Playgroud)

在此之后,如果我这样做:

sunday[2] = 'open';
Run Code Online (Sandbox Code Playgroud)

我得到星期天[2] ='打开',星期一[2] ='打开',星期二[2] ='打开',...,星期六[2] ='打开'.就像所有变量都被"胶合"或链接一样,因为没有你改变的物质,所有变量都以同样的方式变化.

我用这种方式修复了它:

var closed1 =['closed', 'closed', ..., 'closed'];
...
var closed7 =['closed', 'closed', ..., 'closed'];
sunday = closed1;
...
saturday = closed7;
Run Code Online (Sandbox Code Playgroud)

现在我得到了自变量.但我不喜欢这个解决方案,所以如果有人知道这个问题,我将不胜感激.我在Google Chrome上运行JavaScript.

谢谢

I H*_*azy 8

数组是对象,对象是引用类型.

每个变量都sunday, monday, tuesday, etc...保存对同一个Array的引用,因此每个变量都能够观察到该Array的更改.


看看你的代码,我有一种直觉,也许你应该使用Object而不是Array.

var closed = {
    sunday:    'closed',
    monday:    'open',
    tuesday:   'open',
    wednesday: 'open',
    thursday:  'open',
    friday:    'open',
    saturday:  'closed'
};
Run Code Online (Sandbox Code Playgroud)

只是预感.以为我会把它扔出去.

  • 为了强调这一点:在原始版本中只有一个包含许多引用的数组. (2认同)