无法在字符串上创建属性

Nea*_*VDV 9 javascript

当我尝试使用以下代码递归地设置空对象的属性时,我偶然发现了一个奇怪的问题:

简化代码

const birthdays = {};

// Loop -> Passing day, id and birthday
birthdays[day] = day;
birthdays[day][id] = birthday;
Run Code Online (Sandbox Code Playgroud)

一天的例子: '01012017'

id的示例: 1547

生日示例: {name: John}

错误信息

Cannot create property '123' on string '06012017'
Run Code Online (Sandbox Code Playgroud)

我看到一些Angular有这个问题的人,但他们的答案并没有为我解决任何问题(如角度特定语法等).

Pra*_*man 11

在分配值之前,需要单独创建空对象.在这里使用const并不是一个好主意,无论如何,这只是我的建议.

const birthdays = {};
var day = 123;
var id = 21;
var birthday = 2016;
// Loop -> Passing day, id and birthday
birthdays[day] = {};
birthdays[day][id] = birthday;
Run Code Online (Sandbox Code Playgroud)

  • 使用 const 是非常好的,也是这里的最佳实践。这意味着您不会重新分配变量。不要与价值的不变性相混淆 (3认同)

gre*_*gn3 6

我在 Node 14.3.0 (ES 2019) 中遇到了类似的错误消息TypeError: Cannot create property 'false' on boolean 'false',使用新的 Javascript 无分号语法,在下一行进行变量声明和赋值,然后进行解构赋值。

导致错误的代码:

var a = b ()
[c, d] = e ()
Run Code Online (Sandbox Code Playgroud)

解决方法:

var a = b ()
;
[c, d] = e ()
Run Code Online (Sandbox Code Playgroud)