Контроль ошибки доступа к свойствам, читать json с javascript

Я читаю переменную json и извлекаю информацию та же самая.

у меня есть поля свойств в array. Все в порядке до тех пор, пока поле, которое я ищу, не существует

приложение дает ошибку типа:

introducir la descripción de la imagen aquí

Я протестировал все выборы, которые я нашел в сети, чтобы контролировать ошибку:

    1.var tipo = typeof PropModelo[HayarIndice(Nodos[j])].properties[nombreNivel][value]);
    if (tipo ==="undefined")  //error cuando carga la variable "tipo".
    2.if(PropModelo[HayarIndice(Nodos[j])].properties[nombreNivel][value] === void 0)//error cuando se mencionan las propiedades.

Вкратце я протестировал все решения, которые предстали передо мной из-за сети, и мне продолжает давать ошибка каждый раз, когда о нем упоминают:

PropModelo[HayarIndice(Nodos[j])].properties[nombreNivel][value]

Как я могу контролировать ошибку? мне нужно, чтобы переменные, которых у них не есть этот, я выделился, не ломайте выполнение программы. Спасибо.

0
задан 20.01.2017, 14:46
0 ответов

Сообщение ошибки говорит тебе, что ты нуждаешься в том, чтобы подтвердить, если он существует PropModelo[HayarIndice(Nodos[j])] перед тем, как получать .properties так как, если предыдущий undefined У этого нет свойства properties.

Доказательство:

var tipo = typeof PropModelo[HayarIndice(Nodos[j])];
if (tipo === "undefined") ...

Здесь у тебя есть более сложный пример, в котором тестируются все возможности:

var PropModelo = [
  {
    properties:[
      ['hola']
    ]
  },
  {
    sinproperties:[[]]
  },
];
console.log(PropModelo);

for (var i = 0; i < 2; i++) {
  if (typeof PropModelo[i] === 'undefined') {
    console.log("El índice PropModelo[" + i + "] no existe");
    continue;
  }
  if (typeof PropModelo[i].properties !== 'object') {
    console.log("PropModelo[" + i + "].properties no está definido");
    continue;
  }
  for (var a = 0; a < 2; a++) {
    if (typeof PropModelo[i].properties[a] === "undefined") {
      console.log("PropModelo[" + i + "].properties[" + a + "] no existe");
      continue;
    }
    for (var b = 0; b < 2; b++) {
      if (typeof PropModelo[i].properties[a][b] === "undefined") {
        console.log("PropModelo[" + i + "].properties[" + a + "][" + b + "] no existe");
      } else {
        console.log("Valor de PropModelo[" + i + "].properties[" + a + "][" + b + "]: " + PropModelo[i].properties[a][b]);
      }
    }
  }
}
/* Ahora en modo Chuck Norris, fíjate en el "undefined" de uno del (0,0,1) */
for (var i = 0; i < 2; i++) {
  for (var a = 0; a < 2; a++) {
    for (var b = 0; b < 2; b++) {
      try {
        console.log("Valor de PropModelo[" + i + "].properties[" + a + "][" + b + "]: " + PropModelo[i].properties[a][b]);
      } catch (e) {
        console.log("PropModelo[" + i + "].properties[" + a + "][" + b + "] no existe");
      }
    }
  }
}

Я издаю: Я добавляю блок try/catch чтобы показывать функционирование, которое у него было бы под ним (замечать стоимость undefined полученный, согласившись на не существующий индекс существующего массива.

1
ответ дан 03.12.2019, 17:36
  • 1
    Спасибо! @OscarGarcia ты дал мне несколько отпечатков отпечатки, оно я функционирует подтверждая все уровни jerarquí в. var minodo = typeof PropModelo [HayarIndice (Узлы [j])]; var уровни = typeof PropModelo [HayarIndice (Узлы [j])] .properties; var поля = typeof PropModelo [HayarIndice (Узлы [j])] .properties [nombreNivel]; if ((minodo ==" undefined") || (уровни ==" undefined") || (поля ==" undefined")) {.... –  20.01.2017, 15:38
  • 2
    Прости, ú nica способ помещать có я говорю, что он в travé s edició n твоего вопроса. Если ты это пробуешь aquí не podrá s делать это, saldrá как текст и cortará прибыв в lí mite. –  20.01.2017, 15:41
  • 3
    @ClaraAriasDelRey ты не можешь прикреплять có я говорю, как комментарий, ломается diseñ или, он отрезается и не понятен. Относительно твоего вопроса, ¿ она считается решенной или ты имеешь má s ты сомневаешься? Если он así пожалуйста, проголосуй за ответы, которые тебе были полезны и(или) отметка, которая решила бы твою как таковую проблему. И если ты имеешь má s сомнения издай твой вопрос и оставь комментарий, чтобы сообщать нам, что ты это сделал для того, чтобы мы проверили твои изменения. Спасибо. –  23.01.2017, 09:13

Почти это у тебя есть. Я верю, что подтверждая прямо, если он undefined он стоит тебе (но без кавычек) if (array[propiedad]==undefined).....

0
ответ дан 03.12.2019, 17:36
  • 1
    Tambié n я это протестировал, и мне продолжает давать ошибка. Спасибо –  20.01.2017, 15:00
  • 2
    typeof это construcció n языка, который возвращает цепь символов: developer.mozilla.org/es/docs/Web/JavaScript/Referencia/… , если ты это сравниваешь с undefined buscará переменная с этим именем (не existirá) и realizará comparació n с нею. –  20.01.2017, 15:01
  • 3
    Я издал ответ. Habí в скопированное сообщение có я говорю, не смотря этого хорошо. В которое я referí в es, что ты можешь пробовать вернуть прямо стоимость array и проверять, существует ли он смотря, ли он undefined. –  20.01.2017, 15:07
  • 4
    Я оставляю тебе пример того, что я комментирую тебе: jsfiddle.net/fforcen/vu9kp0q6 Verá s, что, когда ты это выполняешь, из-за консоли показывает true, потому что он не существует. –  20.01.2017, 15:11
  • 5
    Верный, но оно не функционирует для массива двух размеров. Как только первая dimensió n не está определенная дай ошибку, попробовав соглашаться на вторую: jsfiddle.net/rq6okes0 –  20.01.2017, 15:32

Теги

Похожие вопросы