开发者问题收集

Nest Javascript 对象不接受推送方法。TypeError:无法读取未定义的属性“推送”

2020-12-23
109

我试图将一个变量推送到嵌套对象的属性中,但 Javascript 一直给出此错误:TypeError:无法读取未定义的属性“push”

但是,如果我声明一个嵌套变量并使用它来推送,它就可以正常工作。为什么 Javascript 会出现这种行为?

有没有办法在不声明嵌套变量和不声明空数组的情况下做到这一点?

var collection = {
    5439: {
      albumTitle: 'ABBA Gold'
    }
  };

collection[5439]["track"] = [''];
console.log(collection[5439].track);
// nested = collection[5439]["track"];
// nested.push('c') // this works
// console.log(nest)
collection[5439]["tracks"].push('c');
3个回答
collection[5439]["tracks"].push('c');

更改为:( track 不是 tracks

collection[5439]["track"].push('c');
thelonglqd
2020-12-23

您可以使用 concat 方法来实现此目的。例如:

collection[5439]["track"].concat('c');
Azahar Alam
2020-12-23

collection[5439]["tracks"].push('c'); 此行出现错误,因为 collection[5439]["tracks"] 未定义且不是数组。

尝试类似这样的操作,如果不存在则使用 ?? (空值合并运算符) 进行初始化

var collection = {
    5439: {
      albumTitle: 'ABBA Gold'
    }
  };

(collection[5439]["tracks"] ??= []).push("hello");

console.log(collection[5439]["tracks"])
Siva Kondapi V
2020-12-23