Javascript 无法在字符串上创建属性

Javascript 无法在字符串上创建属性,javascript,Javascript,在尝试使用以下代码递归设置空对象的属性时,我遇到了一个奇怪的问题: 简化代码 const birthdays = {}; // Loop -> Passing day, id and birthday birthdays[day] = day; birthdays[day][id] = birthday; Cannot create property '123' on string '06012017' 日期示例:'01012017' id示例:1547 生日示例:{name:Joh

在尝试使用以下代码递归设置空对象的属性时,我遇到了一个奇怪的问题:

简化代码

const birthdays = {};

// Loop -> Passing day, id and birthday
birthdays[day] = day;
birthdays[day][id] = birthday;
Cannot create property '123' on string '06012017'
日期示例:
'01012017'

id示例:
1547

生日示例:
{name:John}

错误消息

const birthdays = {};

// Loop -> Passing day, id and birthday
birthdays[day] = day;
birthdays[day][id] = birthday;
Cannot create property '123' on string '06012017'

我看到一些使用Angular的人有这个问题,但他们的答案并不能为我解决任何问题(如Angular特定的语法等)。

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

const生日={};
var日=123;
var-id=21;
var生日=2016年;
//循环->过去的日子,身份证和生日
生日[日期]={};

生日[日期][id]=生日我收到了一条类似的错误消息
TypeError:无法在节点14.3.0(ES 2019)中的布尔值“false”上创建属性“false”,使用新的Javascript无分号语法,在下一行上有一个变量声明和赋值,后跟一个分解赋值

导致错误的代码:

var a = b ()
[c, d] = e ()
解决者:

var a = b ()
;
[c, d] = e ()

首先,定义对象:

let birthdays = {};
然后,获取要在该对象中使用的属性:

let day = '20210203';
let id = 77;
然后,创建一对两个属性(记住方括号,这是一个ES6特性,可以将变量用作键):

最后,形成如下主要对象:

birthdays = {...birthdays, ...pair};

瞧,您已经将kvp添加到一个空对象中,并且不会再出现“无法在字符串“20210203”上创建属性“77”的错误。

它解决了我的问题!我把
birthdays[day]
的初始值和日期本身弄乱了,使用
birthdays[day]={}
完全有效错误似乎很清楚。你的问题是什么?@FelixKling我用
birthdays[day]={}
为我修正了
birthdays[day]
的起始日期,这段代码没有错误。它是完全有效的Javascript。您可以这样做:
生日['01012017']='01012017'
,然后这个
生日['01012017'][1547]={name:'John'}
,它不会触发任何此类错误。这是不正确的。对象不可编辑,因此不能对其使用扩展语法。这将触发一个错误:
…生日
,以及此
…配对
。您在哪里看到迭代@GetFree?尝试浏览器控制台中的所有行,您将看到没有抛出任何错误。我确实尝试过它们。3点语法
要求其右侧的值为iterable。这就是为什么此
…生日
将抛出错误的原因。