在尝试使用以下代码递归设置空对象的属性时,我偶然发现了一个奇怪的问题:
简化代码
const birthdays = {};
// Loop -> Passing day, id and birthday
birthdays[day] = day;
birthdays[day][id] = birthday;
日期示例:'01012017'
id:1547
生日示例:{name: John}
错误消息
Cannot create property '123' on string '06012017'
我看到一些Angular的人有这个问题,但他们的回答并没有为我解决任何问题(角度特定语法等)。
答案 0 :(得分:8)
在分配值之前,需要单独创建空对象。在这里使用const
并不是一个好主意,无论如何,这只是我的建议。
const birthdays = {};
var day = 123;
var id = 21;
var birthday = 2016;
// Loop -> Passing day, id and birthday
birthdays[day] = {};
birthdays[day][id] = birthday;

答案 1 :(得分:1)
在节点14.3.0(ES 2019)中,我有一个类似的错误消息token
,使用新的Javascript无分号语法,并在下一行声明了变量并声明了赋值,然后进行了解构赋值。 / p>
导致错误的代码:
TypeError: Cannot create property 'false' on boolean 'false'
解决者:
var a = b ()
[c, d] = e ()
答案 2 :(得分:0)
首先定义对象:
let birthdays = {};
然后,获取要在该对象中使用的属性:
let day = '20210203';
let id = 77;
之后,创建一对两个属性(记住方括号,这是 ES6 的一个特性,使用变量作为键):
let pair = {[id]: day};
最后,像这样形成主要对象:
birthdays = {...birthdays, ...pair};
瞧,您已向空对象添加了 kvp,并且不会再出现“无法在字符串 '20210203' 上创建属性 '77'”错误。