我尝试使用以下内容从字符串中提取单词:
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(" ");
但为什么?
答案 0 :(得分:6)
你看过发射过的JS吗?有两种可能性。
首先,您永远不会为middleNamesString
分配值。使用从TypeScript类发出的JS,成员不会存在,直到使用值(或undefined
或null
等占位符)初始化它们。如果您尚未为middleNamesString
分配值,则该值为undefined
,您无法在.split()
上致电undefined
。
另一种可能性是,通过您调用方法的方式,this
指向全局范围(例如,如果您的代码在浏览器中运行,则为window
对象。 )在这种情况下,您希望使用箭头函数,该函数将重写对this
的调用以指向TypeScript(和ES6)中的当前类实例。
saveContact = () => {
var middleNames : string[] = this.middleNamesString.split(" ");
}
这仍假设在调用saveContact之前已为middleNamesString
分配了值。