能否以[{}]声明JavaScript对象数组?是否需为元素单独声明对象?
问题解答
首先拆解你的代码逻辑:
club.player_DB = [{}]仅在数组的索引0位置创建了一个空对象,所以你能直接给club.player_DB[0].code赋值——这个位置确实存在可操作的对象。- 但数组的索引1位置并未初始化,此时
club.player_DB[1]的值是undefined,你尝试给undefined的code属性赋值,必然会抛出Cannot set properties of undefined这类错误。
结论:是的,必须为要使用的数组元素单独声明对象
不过你可以用几种更灵活的方式,不一定非要手动逐个赋值空对象:
方式1:初始化时直接创建多个空对象
club = {}; club.player_DB = [{}, {}]; // 提前创建两个空对象 club.player_DB[0].code = 44; club.player_DB[1].code = 21; console.log(club.player_DB[0].code+" "+club.player_DB[1].code); // 正常输出 44 21
方式2:给目标索引赋值空对象后再设置属性
就是你注释掉的那行代码,这是最直接的修复方式:
club = {}; club.player_DB = [{}]; club.player_DB[0].code = 44; club.player_DB[1] = {}; // 先给索引1创建空对象 club.player_DB[1].code = 21; console.log(club.player_DB[0].code+" "+club.player_DB[1].code);
方式3:使用push添加带属性的新对象
如果不确定需要多少元素,这种方式更灵活:
club = {}; club.player_DB = [{}]; club.player_DB[0].code = 44; club.player_DB.push({ code: 21 }); // 直接添加包含code属性的对象 console.log(club.player_DB[0].code+" "+club.player_DB[1].code);
内容的提问来源于stack exchange,提问作者Powl_London
相关产品推荐
相关产品推荐

