javascript - 初始化时数组 'glued'

标签 javascript arrays google-chrome

我在使用几个相关数组时发现了一种奇怪的效果。在寻找错误之后,我终于找到了解决方案。但我想知道你们中是否有人可以向我解释为什么会发生这种情况。

我的代码是这样的:

var closed =['closed', 'closed', ..., 'closed'];
sunday = closed;
...
saturday = closed;

如果我这样做之后:

sunday[2] = 'open';

我得到周日[2] = '开放',周一[2] = '开放',周二[2] = '开放',...,周六[2] = '开放'。就像所有变量都被“粘合”或链接在一起一样,因为无论您更改哪个,它们都会以相同的方式更改。

我是这样修复的:

var closed1 =['closed', 'closed', ..., 'closed'];
...
var closed7 =['closed', 'closed', ..., 'closed'];
sunday = closed1;
...
saturday = closed7;

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

谢谢

最佳答案

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

每个变量 sunday、monday、tuesday 等... 都持有对同一个数组的引用,因此每个变量都能够观察到该数组的变化。


看着你的代码,我有一种直觉,也许你应该使用对象而不是数组。

var closed = {
    sunday:    'closed',
    monday:    'open',
    tuesday:   'open',
    wednesday: 'open',
    thursday:  'open',
    friday:    'open',
    saturday:  'closed'
};

虽然只是预感。我想我会把它扔出去。

关于javascript - 初始化时数组 'glued',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142358/

相关文章:

javascript - jQuery 插件 - 仅在第一次加载时工作

javascript - 如何使用 switch case 范围 JavaScript

Ruby - 如何在不同线程上的每个数组元素上运行一个方法?

css - chrome中的CSS溢出是什么?

google-chrome - Chrome扩展程序-无效的软件包。详细信息:Can't unzip the extension

javascript - 当值设置为它修改的 useState 时,AutoComplete 会发出红色警告

javascript - 使用 Chrome 扩展覆盖 Element.prototype.attachShadow

javascript - 按日期对 javascript 数组进行排序

c - 结构声明中的结构数组 : "array type has incomplete element type"

google-app-engine - 我怎样才能控制 WebKit 中的 Google App Engine 缓存行为(etags 变得疯狂)?