这种语法很好用:
var foo = [];
foo[0] = "do";
foo[1] = "re";
我试图使用属性来做同样的事情。
var foo = [{
note: "",
}];
foo[0].note = "do";
foo[1].note = "re";
但在这种情况下,最后一行现在会生成一个未定义的变量错误。怎么了?
更新
回应评论我的问题可能更清楚。问题出现了,例如,当我尝试将值分配给for循环中的数组时,其中i是索引,类似于
foo[i] = i
但使用带有属性的数组元素时,例如
foo[i].note = i
它不会起作用,因为正如nnnnnn所说,只要索引达到1,该元素就不存在了。所以答案是我不能为数组元素赋值在这样的for循环中,我必须使用像fooNote [i]这样的变量?
答案 0 :(得分:1)
您还需要索引1:
var foo = [{
note: "",
},
{
note:"" //note property for foo[1] is now set here
}];
foo[0].note = "do";
foo[1].note = "re";
console.log(foo);
您的原始数组没有设置索引。
答案 1 :(得分:0)
你的foo变量只有一个元素,在本例中是
{
note: "",
}
因此,当您尝试访问索引[1]时,此结果将显示在未定义的值上。
答案 2 :(得分:0)
您可以动态添加对象,但一次只能添加一个级别。
因此,当您说foo[1] = 're'
时,您正在动态创建广告位1并为其指定值' re'。但foo[1].note = 're'
正在尝试创建无法正常工作的插槽1和属性note
。您可以foo[1] = {note: 're'};
动态创建插槽1,并单独创建要分配给它的对象。
答案 3 :(得分:0)
你未定义,因为foo[1]
未定义,它不存在,做这样的事情foo[1].note
没有意义,因为undefined
不是一个对象
var foo = [{
note: "",
}];
foo[0].note = "do";
Object.assign(foo[1] = {}, { note: "re" });
console.log(foo[1].note);

Object.assign
将对象的成员复制到另一个对象中,在上面的代码中foo[1]
被设置为一个对象,然后才将{note: "re"}
复制到foo[1]
答案 4 :(得分:0)
看起来您认为您正在声明具有属性note
的对象数组。您无法在javascript中真正做到这一点,您可以将其编写以供将来参考,因为它完全有效,可以用完全不同的东西覆盖它。
在你的情况下,foo [0]存在,而foo [1]不存在。您试图影响非现有属性的值,因此会出错。
执行var foo = [{note:""}];
时,实际上有一个长度为1的数组。您可以访问foo [0],但foo [1]仍未定义。您需要为其分配值。
var foo = [{note: ""}]; // {note:""} is here for reference;
foo[0].note = "do"; // or foo[0] = {note: "do"};
foo[1] = {note: "re"};