Проверьте, не является ли что-то не определенным в JavaScript

Ответы:

344

response[0] не определен, проверьте, определен ли он, а затем проверьте его заголовок свойства.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
amosrivera
источник
20
Несмотря на количество голосов, это не хороший способ выполнить проверку, потому что undefinedэто не ключевое слово JavaScript (хотя, кажется, все думают, что это так). Если вы хотите, вы можете создать переменную с именем, undefinedи тогда эта проверка будет неправильной. Единственный правильный способ - это проверить (typeof myVar !== 'undefined').
BadHorsie
4
@BadHorsie имеет смысл, я обновил ответ с вашим комментарием.
Амосривера
1
Что если переменная существует и содержит строку, которая читается как «неопределенная»?
TomeeNS
1
@BadHorsie Ваш аргумент является поддельным. Почему я должен переопределить undefined?
Роберт Симер
1
@amosrivera Нет, его / ее комментарий не имеет смысла. Вы ухудшили свой ответ.
Роберт Симер
40

Просто проверьте, response[0]не определено ли:

if(response[0] !== undefined) { ... }

Если вам все еще нужно явно проверить заголовок, сделайте это после начальной проверки:

if(response[0] !== undefined && response[0].title !== undefined){ ... }
Рион Уильямс
источник
35

У меня были проблемы со всеми другими примерами кода выше. В Chrome это было условие, которое работало для меня:

typeof possiblyUndefinedVariable !== "undefined"

Мне придется проверить это в других браузерах и посмотреть, как идут дела, я полагаю.

Карл Хенселин
источник
2
То же самое - я обнаружил, undefinedчто должна быть строка.
Restrh
это должно быть что-то новое с Chrome (я на Win Chrome 41 АТМ). принятый ответ работал просто отлично! : P
Джо
13

На самом деле вы должны окружить его блоком Try / Catch, чтобы ваш код не переставал работать. Как это:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
Андре Луис
источник
Я смотрел на IE 8 и должен был сделать попытку поймать.
RonanOD
1
это лучший способ, если вы тестируете, если функция не определена
edepperson
выдача ошибки для проверки undefined не является хорошим решением. @amosrivera - лучшее решение.
user3658423
@ user3658423: Ошибка не выдается. Он только предотвращает остановку скрипта, если ответ не объявлен (потому что это приведет к ошибке).
Андре Луис
Иногда ошибки могут быть полезны. С вашим предложенным решением, если doSomething () генерирует исключение, все, что вы увидите в своей консоли, это «responsede [0] .title не определен» вместо полезного сообщения о «не пойманном исключении @ строка 123 файла xyz». .js». В конце концов, второй разработчик, вероятно, закомментирует оператор console.log (), что усложнит задачу третьего разработчика войти и исправить ошибку, происходящую глубоко внутри doSomething ().
Эрик Сизранд,
9

тип:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}
Джеффри Марк Болдридж
источник
1

Это будет потому, что response[0]сам не определен.

DavidGouge
источник
1

Проверьте, если condition == null; Это решит проблему

Танмай Чандра
источник
1
Это должен быть комментарий
ρяσѕρєя K
0

Проверьте, существуете ли вы на response[0]самом деле, похоже, что ошибка не существует.

Exelian
источник
0

Сначала вы должны проверить, response[0]является ли неопределенным, и только если это не так, проверьте все остальное. Это означает, что в вашем случае response[0]не определено.

Алекс Турпин
источник
0

Я знаю, что я приехал сюда на 7 месяцев позже, но я нашел эти вопросы, и это выглядит интересно. Я попробовал это на моей консоли браузера.

try{x,true}catch(e){false}

Если переменная x не определена, ошибка отлавливается, и она будет ложной, в противном случае она вернет true. Таким образом, вы можете использовать функцию eval, чтобы установить значение переменной

var isxdefined = eval('try{x,true}catch(e){false}')
AngeLOL
источник
1
Интересный подход, если можно так сказать сам.
Брандито
0

В некоторых из этих ответов есть фундаментальное недоразумение о том, как использовать typeof.

некорректный

if (typeof myVar === undefined) {

Верный

if (typeof myVar === 'undefined') {

Причина в том, что typeofвозвращает строку. Следовательно, вы должны убедиться, что она вернула строку «undefined», а не undefined(не заключенную в кавычки), которая сама по себе является одним из примитивных типов JavaScript . typeofОператор никогда не возвращает значение типа undefined.


добавление

Ваш код может технически работать, если вы используете неправильное сравнение, но, вероятно, не по той причине, о которой вы думаете. В undefinedJavaScript нет ранее существовавшей переменной - это не какое-то волшебное ключевое слово, с которым можно сравнивать вещи. Вы можете создать переменную с именем undefinedи присвоить ей любое значение.

let undefined = 42;

И вот пример того, как вы можете использовать это, чтобы доказать, что первый метод неверен:

https://jsfiddle.net/p6zha5dm/

BadHorsie
источник