【问题标题】:try catch in javascript for undefined check尝试在 javascript 中捕获未定义的检查
【发布时间】:2018-06-13 22:28:56
【问题描述】:

我有一个方法 findResult

function findResult(response){
 if (response[0].firstProperty.Value > 0)
     return true;
 else false;
}

在这个方法中,如果响应对象未定义,我们会得到一个 javascript 错误。我的问题是是否使用明确的未定义检查或将代码包装在 try/catch 周围,如下所示:

function findResult(response){
 try{
    if (response[0].firstProperty.Value > 0)
     return true;
    else return false;
 }
 catch(e){
   return false;
 }

}

【问题讨论】:

  • 有无数种方法可以处理这个问题,与其他方法相比,没有一种方法会产生特别大的影响。 (if vs try()catch(){} 无关紧要)stackoverflow.com/questions/19727905/… 这里真正的问题是如果responsenull,你是否想继续在同一个块中执行代码。如果答案是否定的,那么您选择哪种解决方案并不重要
  • 谢谢蒂莫西。使用显式检查,条件检查变得太长 例如:if (response && response.length && response[0].firstProperty.Value > 0)
  • 所以检查什么是最佳方法。感谢回复

标签: javascript


【解决方案1】:

你可以通过简单的检查来避免 try catch

if (response && response.length && response[0].firstProperty.Value > 0) { ... }

如果您可以访问 lodash:

if (_.get(response, '[0].firstProperty.Value', 0) > 0) { ... }

【讨论】:

    【解决方案2】:

    Javascript 本身没有此功能。

    但是网络上有一些实现。例如:

    function deepGet (obj, props, defaultValue) {
        // If we have reached an undefined/null property
        // then stop executing and return the default value.
        // If no default was provided it will be undefined.
        if (obj === undefined || obj === null) {
            return defaultValue;
        }
    
        // If the path array has no more elements, we've reached
        // the intended property and return its value
        if (props.length === 0) {
            return obj;
        }
    
        // Prepare our found property and path array for recursion
        var foundSoFar = obj[props[0]];
        var remainingProps = props.slice(1);
    
        return deepGet(foundSoFar, remainingProps, defaultValue);
    }
    

    用法:

    var rels = {
        Viola: {
            Orsino: {
                Olivia: {
                    Cesario: null
                }
            }
        }
    };
    var oliviaRel = deepGet(rels, ["Viola", "Orsino", "Olivia"], {});
    

    来源:http://adripofjavascript.com/blog/drips/making-deep-property-access-safe-in-javascript.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多