【问题标题】:How would you except this undefined method除了这个未定义的方法,你会怎么做
【发布时间】:2013-05-18 07:41:43
【问题描述】:

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

请看下面的代码:

变量描述; var desc = 预测[i].getElementsByTagName('desc')[0] if (desc != null || desc.textContent == "") { 描述 = desc.textContent }

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

Uncaught TypeError: Cannot read property 'textContent' of undefined

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

【问题讨论】:

    标签: javascript exception-handling


    【解决方案1】:

    你的条件不对:

    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;
    }
    

    【讨论】:

    • 其实 undefined == null 是真的。试试看……只有 undefined === null 是错误的。问题是您在答案中“修复”的 or 运算符
    • @MofX 感谢您发现这一点,我的意思是说它的计算结果为 false,但我忘了把它放在我的答案中 :)
    【解决方案2】:
    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。

    如果desc 存在但desc.textContent 不继续获取desc.textContent,您还应该删除OR 运算符。用 AND 运算符 if (desc && desc.textContent) 替换您的 OR 语句。

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

    【讨论】:

    • desc.textContent 实际上会导致错误,因为在这种情况下没有定义desc
    • @Jack 我看到只是在测试这个,我已经更新了我的答案。
    • 代码现在是正确的,但其余的答案似乎与它不太相关。
    • @Jack 我不明白你为什么这么认为,它解释了我对他的原始代码所做的更改。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多