我正在创建一个个人脚本,在某些情况下会收到错误:
Cannot read property '0' of undefined
我有类似的东西
item["OfferSummary"][0]["LowestUsedPrice"][0]["FormattedPrice"]
是否可以完全忽略/覆盖此错误,以便在该场景中只打印n / a或 - ?
答案 0 :(得分:2)
您可以使用try
and catch
执行错误处理。
答案 1 :(得分:2)
您可以使用样板函数来执行此操作:
function get(obj, property) {
if (Array.isArray(property)) {
var current = obj;
for (var i = 0, l = property.length; i < l; ++i) {
if (Object(current) === current) current = current[property[i]];
else {
current = undefined;
break;
}
}
return current;
}
if (Object(obj) === obj) return obj[property];
}
将字符串或数组传递给get
以查找属性 - 如果未找到,则会返回undefined
。
示例:
get(window, ['location', 'href']); // "http://stackoverflow.com..."
get(Number, 'MAX_VALUE'); // 1.7976931348623157e+308
答案 2 :(得分:0)
即使你可以使用try和catch我也不会这样做,我宁愿避免错误,所以你只需要检查你正在阅读的对象:
if(item && item["OfferSummary"].length && item["OfferSummary"][0]["LowestUsedPrice"].length) {
//then do whatever
}
如果你知道项总是被定义,你可以避免在if中检查它。
答案 3 :(得分:0)
与Qantas的答案类似,但在测试中使用。总是希望属性列表是一个数组,我无法看到使用它来获取单个属性的意义,因此对这种情况没有任何让步:
function get2(obj, prop) {
for (var i=0, iLen=prop.length - 1; i<iLen; i++) {
if (typeof obj[prop[i]] == 'object') {
obj = obj[prop[i]];
} else {
// Property not found, return undefined (or other suitable value)
return;
}
}
return obj[prop[i]];
}
var foo = {foo:{bar:{meh:'meh!'}}};
var fum = {meh:'meh!'};
console.log(get2(foo,['foo','bar','meh'])); // meh!
console.log(get2(fum,['meh'])); // meh!
console.log(get2(Number,['MAX_VALUE'])); // 1.7976931348623157e+308
console.log(get2(Object,['prototype','toString'])); // function toString() { ... }
Per Qantas的评论,测试已更新。