Javascript“无法读取未定义的属性”栏“

这个问题在这里已经有了答案:

  • 检测未定义的对象属性40个答案

  • 如果一个对象的属性可能引用某个其他对象,那么您可以在尝试使用它的属性之前对其进行测试:

    if (thing && thing.foo)
       alert(thing.foo.bar);
    

    我可以更新我的答案,以更好地反映你的情况,如果你显示一些实际的代码,但可能是这样的:

    function someFunc(parameterName) {
       if (parameterName && parameterName.foo)
           alert(parameterName.foo.bar);
    }
    

    您可以通过以下两种方式来保护自己:

    function myFunc(thing) {
        if (thing && thing.foo && thing.foo.bar) {
            // safe to use thing.foo.bar here
        }
    }
    
    function myFunc(thing) {
        try {
            var x = thing.foo.bar;
            // do something with x
        } catch(e) {
            // do whatever you want when thing.foo.bar didn't work
        }
    }
    

    在第一个示例中,您明确地检查了您所引用的变量的所有可能元素,以确保在使用它之前它是安全的,因此您不会收到任何计划外参考异常。

    在第二个示例中,您只需在其中放置一个异常处理程序。 假设它存在,您只需访问thing.foo.bar 。 如果它确实存在,那么代码正常运行。 如果它不存在,那么它会抛出一个你会忽略的异常。 最终结果是一样的。 如果thing.foo.bar存在,则使用它的代码将执行。 如果它不存在代码不执行。 在所有情况下,该功能正常运行。

    if语句执行起来更快。 在可能有许多可能的情况需要防范并且代码结构化的复杂情况下,异常可以更简单地进行编码和使用,以便引发异常并处理它是在某些数据不存在时跳过执行的干净方式。 抛出异常时,异常会慢一点。


    复合检查:

       if (thing.foo && thing.foo.bar) {
          ... thing.foor.bar exists;
       }
    
    链接地址: http://www.djcxy.com/p/22633.html

    上一篇: Javascript "cannot read property "bar" of undefined

    下一篇: ResultSet to Excel (*.xlsx) Table Using Apache POI