我有一个正在侦听事件的类。当该事件发生时,我想将附带 even 的数据推送到数组并显示它。这是我的班级:
export class randomClass {
someArray:Array<string>;
constructor(public navCtrl: NavController,
public navParams: NavParams,
public events: Events) {
events.subscribe('event',
(data) => {
//some random code
this.someArray.push(data); //this fails
}
)
}
我得到的错误是:类型错误:未定义不是一个对象(评估 "_this.沟通.推送")
我想这是微不足道的,但在任何地方都找不到答案。
好的。问题是我必须用一个空数组初始化属性(有人可以解释为什么吗?下面解决了问题。
communication:Array<string> = [];
问题是我必须用空初始化属性 数组(有人可以解释为什么吗?
当你这样做时
someArray: Array<string>;
您只是声明一个名为 someArray
的属性并将其类型设置为 strings
的Array
,但您没有初始化该属性,因此最初someArray
将是undefined
。
因此,当您尝试执行此操作时:
this.someArray.push(data);
由于this.someArray
是未定义的,因此您正在尝试调用undefined
的push
方法,该方法不存在(这就是为什么错误说类似TypeError:undefined不是一个对象)。
就像你说的,解决方案是用空Array
初始化someArray
。这样,您将能够调用 push
方法,因为它是在类型为 Array
的每个对象中定义的。
someArray: Array<string> = [];
问题是当将此代码转译为 javascript 时,变量 someArray
的值等于 undefined。这就是转译器的工作原理。不能将数据推送到未定义的变量中。因为它不是一个数组。如果将其初始化为 someArray:Array<string> = []
它将被转译为var someArray = []
。现在,您可以将数据推送到数组中。