2016-02-19 64 views
3

在IF语句读取一个未定义的对象的性质我有一个简单的if-else语句不能开玩笑

if(this.props.params.id){ 
    //do something 
} 

现在,这在浏览器中正常工作。 如果参数中有一个id,它将输入if子句,如果没有id,则不输入。

现在同时用开玩笑写测试,当ID没有被定义它抛出一个错误: “无法读取属性‘身份证’的未定义” 为什么会这样,不应该是把它当作假的? 它在浏览器中正常工作,只是在测试中会引发错误。

回答

0

如果ID本身是不确定的,那么你的测试工作正常(虽然有写它的更好的方法)

你得到的问题是从this.props.params是不确定的。在这种情况下,您正尝试访问不存在的内容。

为了解决这个问题,您需要检查是否同时定义了两个参数AND ID。

可以是这样做的:

if (typeof this.props.params !== 'undefined' && this.props.params.id !== 'undefined') { 
    //do something 
} 

它好得多的typeof用于检查未定义的变量,因为它是可能的,如果你如果变量计算虚假陈述失败。

+0

它也抛出一个错误'无法读取undefined'的财产。 – Max

0

尝试:

if(this.props.params){ 
    var id = this.props.params.id; 
}