Typescript TypeError:无法获取属性' split'未定义或空引用

时间:2015-05-20 15:04:28

标签: typescript

我尝试使用以下内容从字符串中提取单词:

export class AddContactCtrl implements IAddContactCtrl {

    middleNamesString: string;

    saveContact() {
        var middleNames : string[] = this.middleNamesString.split(" ");
    }
}

但是,我收到以下错误:

  

TypeError:无法获取属性' split'未定义或null   参考

为什么会这样? this.middleNamesString的类型为string,它应该具有split()方法,但它会返回null / undefined?我怀疑它与我使用this的方式有关,但我不确定原因。

我尝试删除middleNames字符串数组类型,但没有效果。如果我将其更改为如下的局部变量,它确实有效:

var randomString = "Random Name";
var middleNames : string[] = randomString.split(" ");

但为什么?

1 个答案:

答案 0 :(得分:6)

你看过发射过的JS吗?有两种可能性。

首先,您永远不会为middleNamesString分配值。使用从TypeScript类发出的JS,成员不会存在,直到使用值(或undefinednull等占位符)初始化它们。如果您尚未为middleNamesString分配值,则该值为undefined,您无法在.split()上致电undefined

另一种可能性是,通过您调用方法的方式,this指向全局范围(例如,如果您的代码在浏览器中运行,则为window对象。 )在这种情况下,您希望使用箭头函数,该函数将重写对this的调用以指向TypeScript(和ES6)中的当前类实例。

saveContact = () => {
    var middleNames : string[] = this.middleNamesString.split(" ");
}

这仍假设在调用saveContact之前已为middleNamesString分配了值。