除了这个未定义的方法,你会怎么做?

时间:2013-05-18 07:41:44

标签: javascript exception-handling

我想检查元素是否存在且其中一个方法不是空白的?

请查看以下代码:

                 
var description;           
var desc = forecasts[i].getElementsByTagName('desc')[0]
if (desc != null || desc.textContent == "") {
    description = desc.textContent
}

所以基本上如果没有定义元素,它会给我一个错误:

Uncaught TypeError: Cannot read property 'textContent' of undefined

好吧,我可以使用嵌套的ifs,但我认为应该有更复杂的解决方案来解决这个问题。

2 个答案:

答案 0 :(得分:3)

你的情况错了:

desc != null || desc.textContent == ""

由于undefined != null评估为false,因此该条件将尝试访问desc.textContent

如果内容存在且不为空,您似乎想要复制内容;这可以通过以下条件来完成:

var description,
desc = forecasts[i].getElementsByTagName('desc')[0];

if (desc && desc.textContent.length) {
    description = desc.textContent;
}

答案 1 :(得分:1)

var description;           
var desc = forecasts[i].getElementsByTagName('desc')[0]
if (desc && desc.textContent) {
    description = desc.textContent
}

var string = ""; if (string)在JavaScript中评估为false,因此您只需删除相等性检查,并确保desc.textContent不会评估为false。

您还应该删除OR运算符,因为您说desc存在,但desc.textContent没有继续并获得desc.textContent。用AND运算符if (desc && desc.textContent)替换OR语句。

示例: http://jsfiddle.net/pFBpc/5/ - 请注意,有3个if语句但只有一个的计算结果为true。