#javascript
Вопрос:
Я получаю ошибку в NewRelic, показывающую ошибку JS для `не удается прочитать таймеРшоу свойства null
. Я проследил его до этой функции:
isShown() {
return this.person.value.timerShow === this.timerActive;
}
Когда я захожу в журнал this.person.value
, это объект, но timerShow
иногда на нем нет поля. Разве это все равно не сработало бы и просто не привело false
бы к тому, что этого не произошло timerShow
?
Я думал, что использование необязательной цепочки было бы, если бы вы не были уверены в значении выше по цепочке, например:
isShown() {
return this.person?.value?.timerShow === this.timerActive;
}
где value
потенциал может быть равен нулю
Комментарии:
1. Как указано в сообщении об ошибке, есть случай, когда значение
this.person.value
равноnull
. Вам нужно будет это отладить2. » Когда я захожу в журнал
this.person.value
, это объект » — видимо, не всегда. Если это не соответствует вашим ожиданиям, найдите источник проблемы, вместо того чтобы просто устранять ееthis.person.value?.timerShow
. Да, если толькоtimerShow
этого не существует, это просто приводит к тому, что сравнение даетfalse
результат .3. @Bergi спасибо тебе. Просто для ясности, хотя, если
value
бы всегда гарантированно был объект, необязательное включениеtimerShow
не было бы необходимым, верно?this.person.value?.timerShow
было бы то жеthis.person.value.timerShow
самое , верно?4. отсутствие доступа к какому-либо методу для чего-либо, что равно нулю, выдает ошибку, но если вы используете
?
его, он просто вернет неопределенное значение5. @HarLinton Да, если
value
бы всегда был объект, вы могли бы использоватьvalue.…
вместоvalue?.…
.
Ответ №1:
попробуйте это:
isShown() {
if(typeof this.person?.value?.timerShow == "undefined")
return false;
return this.person?.value?.timerShow === this.timerActive;
}
Ответ №2:
Попробуй вот так:
isShown() {
return this.person?.value?.timerShow ?? 'your return here '
}
Если в первой части ничего нет, она возвращает вторую часть ??