如果js数组为数组中的嵌套元素引发未定义,我想编写一个小辅助函数来返回0。我遇到的问题是,如果第一个索引已经失败并引发未定义的错误。嵌套索引不会在第二个索引失败!但它没有到达那里。如何在这里捕获所有错误最好?
function helper_check(arr){
if (typeof(arr) == 'undefined') {
return 0
}
var some_var = helper_check(some_arr[0][1]) // so here some_arr[0] already fails and raises an error but i want to catch all errors witht he helper function
答案 0 :(得分:1)
我认为你正在尝试做这样的事情。这里如果arr是一个空数组,那么它将在第二个if上失败。如果arr由于某种原因不是数组,它将在第一个if上失败。
function get_val(arr, x, y){
if (!arr || !Array.isArray(arr)) {
return 0;
}
if (arr[x] === undefined || arr[x][y] === undefined) {
return 0;
}
return arr[x][y];
}
var some_var = get_val(some_arr, 0, 1)
如果你想保留旧的方法,你必须抓住错误。
function helper_check(arr){
if (typeof(arr) == 'undefined') {
return 0
}
var some_var = 0;
try {
some_var = helper_check(some_arr[0][1]);
}
catch(err) {//nothing to do here}
另一个不太优雅的选择
function helper_check(arr){
try {
var val = eval(arr);
if (typeof(val) == 'undefined') {
return 0;
}
return val;
catch(err) {
return 0;
}
}
some_var = helper_check('some_arr[0][1]');
答案 1 :(得分:0)
这是一个较旧的问题,但我在遇到类似问题时遇到了它,我在这里发布我的答案,以防它可以帮助其他人。
typeof(arr) == 'undefined'
这种方法实际上并没有在我的代码中捕获 [arr]
的未定义状态。我还尝试了 try/catch 方法 https://www.w3schools.com/js/js_errors.asp,结果类似。
对我有用的解决方案出奇地简单。只需测试 [arr]
的长度属性。
if (arr.length < 1)
根据您是否想要更明确,沿着这条思路还有多种其他选择。