我正在尝试获取给定数组中的最大元素,以下是要求:
如果键上没有属性,则应返回undefined。
var obj = { 键:[1、2、4] };
有人可以向我解释为什么我放
!obj.hasOwnProperty(key)
在 IF 函数的末尾,我得到一个错误:如果该属性不存在,应该返回undefined。但是,当我将其放在< strong> IF 函数,它可以顺利通过。
var obj = {
key: [1, 2, 4]
};
function getLargestElementAtProperty(obj, key) {
if (obj[key].length === 0 || !Array.isArray(obj[key]) || !obj.hasOwnProperty(key)) {
return undefined;
}
var largestElement = 0;
for (var i in obj[key]) {
if (largestElement < obj[key][i]) {
largestElement = obj[key][i];
}
}
return largestElement;
}
答案 0 :(得分:4)
将!obj.hasOwnProperty(key)
放在if语句的开头时,如果对象没有指定的键(因此!obj.hasOwnProperty(key)
产生true
),则其他检查将不会由于OR short-circuiting而被评估(简短地说,如果任何条件评估为true,则由于整个表达式始终为true,因此不会评估其他任何检查)。
但是,将obj[key].length === 0
放在if语句的末尾时,将首先对其进行评估。如果为obj[key] === undefined
,则在评估obj[key].length
时会发生错误,因为undefined
没有属性length
。具体来说,错误是:TypeError: Cannot read property 'length' of undefined