Решён
Если ответа моего нет, значит это примитив?

Павел Кодер JavaScript
2k
4

Отправляю форму на сервер, проверяю ответ. Если response.data.myField === undefined, это значит что поле вообще не пришло, или что оно пришло со значением undefined?

И как отличить ситуацию когда поле отсутствует от ситуации когда оно явно установлено в null или undefined?

Решение
42
Участник • 1 ответ

В JSON нет undefined вообще. Когда сервер отдает JSON, там может быть только null. Если поле отсутствует в ответе, после парсинга обращение к нему вернет undefined, но это JS так работает с несуществующими ключами объекта.

Чтобы отличить:

if ('myField' in response.data) {
  // поле существует (может быть null)
} else {
  // поля нет вообще
}

Или через hasOwnProperty:

if (response.data.hasOwnProperty('myField')) {
  // поле есть
}
Аватар Павел Кодер

Аааа, вот оно что! Спасибо, in оператор не знал что так можно использовать

18
Участник • 1 ответ

Короче: 'key' in obj проверяет наличие ключа, obj.key === undefined не отличает отсутствие от явного undefined (которого в JSON быть не может).

11
Участник • 1 ответ

На тайпскрипте это решается через optional поля в интерфейсе:

interface Response {
  myField?: string | null;
}

Тогда компилятор заставит тебя проверять существование поля перед использованием.

1
Эксперт • 2 ответа

можно еще через Object.keys проверить есть ли ключ в массиве ключей но это изврат конечно

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.