Javascript 我如何解决这个问题;无法读取属性。。。“未定义”的定义;不使用try/catch?

Javascript 我如何解决这个问题;无法读取属性。。。“未定义”的定义;不使用try/catch?,javascript,Javascript,此函数用于计算特定类型数组中的所有项。但是,当某一类型的元素为零时,我会收到“无法读取未定义的属性…”错误。我曾尝试使用typeof关键字来修复它,但没有成功。我的语法正确吗?如何解决此问题 function typeCount(type){ if (typeof (base.getbyType(type)) === "undefined"){ return 0; } else { return base.getbyType(type).length;} } var pCoun

此函数用于计算特定类型数组中的所有项。但是,当某一类型的元素为零时,我会收到“无法读取未定义的属性…”错误。我曾尝试使用typeof关键字来修复它,但没有成功。我的语法正确吗?如何解决此问题

function typeCount(type){
    if (typeof (base.getbyType(type)) === "undefined"){ return 0;  }
    else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');
您可以这样尝试:

function typeCount(type){
    if (base.getbyType(type) === undefined){ return 0;  }//modified code here
    else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');

只要让
getbyType
在没有匹配项的情况下返回一个空数组,就不需要检查:

function typeCount(type){
    return base.getbyType(type).length;
}
但是,如果发布的代码抛出异常,则错误在其他地方-如中,而不是本质上使用
.length
访问。考虑这些可能的原因:

  • base
    本身的计算结果为未定义。正确的解决方法是确保
    base
    不能未定义。这里的守卫只是隐藏了问题,不应该使用

  • 异常是从
    getbyType
    中引发的。这意味着函数已损坏-请修复它

  • getbyType
    不一致,有时返回undefined。这意味着函数已损坏-请修复它

并且,如果
getbyType
坚持不返回空数组,则使用临时变量。这也避免了原始代码所做的不必要的重复工作

function typeCount(type){
    var res = base.getbyType(type);
    return (typeof res === "undefined") ? 0 : res.length;
}
或者,不管它是否是严格未定义的(有什么好处是
null.length
?)

或者,如果我们感觉“聪明”(注意,
getbyType
仍然只调用一次)

你可以试试这个

function typeCount(type){
    if (base && base.getbyType && typeof (base.getbyType(type)) === "undefined"){ return 0;  }
    else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');

可能是
base
base.getbyType
未定义

function typeCount(type){
    if (typeof base === 'undefined' || !base.getbyType || base.getbyType(type) === "undefined"){ return 0;  }else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');
function typeCount(type){
    if (base && base.getbyType && typeof (base.getbyType(type)) === "undefined"){ return 0;  }
    else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');
function typeCount(type){
    if (typeof base === 'undefined' || !base.getbyType || base.getbyType(type) === "undefined"){ return 0;  }else { return base.getbyType(type).length;}
}
var pCount = typeCount('pen');