我有一个正在听事件的课程。当该事件发生时,我想将偶数带来的数据推送到数组并显示它。这是我的班级:
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
}
)
}
我得到的错误是:TypeError:undefined不是一个对象(评估 &#39; _this.communication.push&#39)
我猜这是微不足道的,但无法在任何地方找到答案。
答案 0 :(得分:1)
确定。问题是我不得不用一个空数组初始化属性(有人可以解释原因吗?)。以下解决了这个问题。
communication:Array<string> = [];
答案 1 :(得分:1)
问题是我必须用空来初始化属性 数组(有人可以解释原因吗?)
当你这样做时
someArray: Array<string>;
您只是声明了一个名为someArray
的媒体,并将其类型设置为Array
strings
,,但您并未初始化该媒体资源,因此最初someArray
将为undefined
。
所以当你尝试这样做时:
this.someArray.push(data);
由于this.someArray
未定义,因此您尝试调用push
undefined
的{{1}}方法,该方法不存在(这就是错误说明的原因)喜欢 TypeError: undefined不是对象 )。
正如您所说,解决方案是使用空someArray
初始化Array
。这样,您就可以调用push
方法,因为它在类型为Array
的每个对象中都已定义。
someArray: Array<string> = [];
答案 2 :(得分:0)
问题是当将此代码转换为javascript时,变量someArray
的值等于 undefined 。那个转换器是如何工作的。您无法将数据推送到未定义的变量中。因为它不是一个数组。如果您将其初始化为someArray:Array<string> = []
,则会将其转换为var someArray = []
。现在您可以将数据推送到数组中。