无法在字符串

时间:2017-01-06 16:41:36

标签: javascript

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

简化代码

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的人有这个问题,但他们的回答并没有为我解决任何问题(角度特定语法等)。

3 个答案:

答案 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'”错误。