Есть пустой объект:
var testObj = {};
Допустим, где-то у себя в коде я пытаюсь проверить есть ли у этого объекта какое-то свойство:
console.log(typeof testObj.test); // undefined
Я получу undefined, его нет, всё хорошо.
НО, если я пойду дальше и вызову
console.log(typeof testObj.test.var);
Я получу ошибку Uncaught TypeError: Cannot read property 'var' of undefined.
Почему Javascript не скажет мне так же undefined? Он скажет только в том случае, если внутри testObj, я определю test.
Получается, что объекты должны иметь определенную структуру? Но как быть, если я получаю от сервера разные json данные, с произвольной структурой. Я запишу эти данные в объект. Начну проверять, каких-то данных не окажется и Javascript выдаст ошибку.
Как мне сделать так, чтобы я смог написать, что-то вроде(при условии что testObj пустой объект):
if(testObj.test.var === "OK"){
console.log("ok!")
}
Потому что так описано в спецификации оператора typeof.
Как мне сделать так, чтобы я смог написать, что-то вроде(при условии что testObj пустой объект):
Только добавив проверки вручную:
if(testObj && testObj.test && testObj.test.var === "OK"){
console.log("ok!")
}
В этом случае объект существует и у него есть свойство, значение которого undefined:
console.log(typeof testObj.test);
А в этом,
console.log(typeof testObj.test.var);
транслятор не может присвоить свойство и, соответственно, получить его значение потому что объекта, к которому вы пытаетесь обратиться не существует, о чем транслятор и говорит явно - Cannot read property 'var' of undefined (Не могу получить свойство var у undefined).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости