Отключение не удается прочитать свойство undefined

#javascript #arrays #error-handling

#javascript #массивы #обработка ошибок

Вопрос:

Я знаю, что мой gfg[item[0] 1][item[1]] не существует, но мне нужно выполнить свой код дальше:

  arrayfirstword.forEach(item => {
                if(typeof(gfg[item[0]   1][item[1]]) !== undefined){
                    console.log(1);
                }
 

Есть ли способ отключить эту ошибку?

Ответ №1:

Нет. Вы должны скорректировать свой код и убедиться, что вы не получаете доступ к вещам из неопределенного значения:

 arrayfirstword.forEach(item => {

                if(item amp;amp; gfg amp;amp; item[0] amp;amp; item[1] amp;amp; gfg[item[0]   1] amp;amp; typeof(gfg[item[0]   1][item[1]]) !== undefined){
                    console.log(1);
                }
 

Для аннулирования повторяющихся выражений:

 arrayfirstword.forEach(item => {
                if (!item || !item[0] || !item[1] || !gfg) return;
                let key = item[0]   1;
                let val = gfg[key];
                if (val amp;amp; val[item[1]]) {
                    console.log(1);
                }
                
 

В этом случае это уродливее, но если условие становится более сложным, возможно, было бы лучше разбить его на 5-6 строк вместо того, чтобы иметь огромное вложенное сложное условие.

Комментарии:

1. Спасибо, брат, но я не понял, вы все еще проверяете значение неопределенной переменной?

2. @s662720h_uu || и amp;amp; ленивы. Они перестают оценивать условие, когда могут вернуть значение. Например true || someFunc() , не будет запускаться someFunc() , потому true || anything === true что . То же самое с false amp;amp; someFunc() will not run someFunc() , потому false amp;amp; anything === false что . undefined.attribute это ошибка, поэтому вы можете избежать ее, выполнив if (v amp;amp; v.attribute) проверку if v is undefined v amp;amp; v.attribute only v , поскольку undefined это «falsey», и он не будет пытаться получить attribute от undefined