Javascript ! = не конвертируется для null?

#javascript #comparison #operators

#javascript #сравнение #операторы

Вопрос:

У меня есть следующая идиома:

 if(typeof prop != 'null') {
}
  

У меня создалось впечатление, что если prop есть null , != оператор преобразует нулевой объект в строку ‘null’ для сравнения?

В приведенном выше случае, когда prop имеет значение null, выражение вычисляется как true . Почему эта идиома работает для undefined? Разве undefined не является объектом? Так же, как null является объектом?

Комментарии:

1. Вы сравниваете со строкой «null», а не с null объектом, так что это true так (null != 'null') .

2. @Cory Larson — конечно, я думал, что это может работать больше как if("1" == 1) // true

3. Вы получаете такое поведение больше с числами и пустыми строками, чем с чем-либо еще. Вы должны исследовать «правдивые» и «ложные» сравнения в JavaScript.

Ответ №1:

Тип нулевого объекта по-прежнему является «объектом». Если вы предупредите (typeof prop), вы увидите, что это объект.

Вы хотите проверить наличие нулевого значения.

 if(prop == null) {
    alert(typeof prop);
}
  

Комментарии:

1. Джейсон Дин — вы действительно правы — именно использование typeof этого вызывало у меня замешательство.

2. Запуск typeof(null) возвращает object , тогда typeof(undefined) как возвращает undefined .

3. для меня это имеет смысл. Неопределенная ссылка не может иметь тип, она не определена. Но объект с нулевым значением все еще является объектом.

4. @wulfgar.pro тип undefined — это строка undefined. typeof(не определено) != не определено // true typeof(не определено) === «не определено» // true

5. Правильно, typeof возвращает строку, которая сообщает вам, что это за тип. Typeof(object) — это строка «object», typeof(undefined) — это строка «undefined». typeof всегда возвращает строку.

Ответ №2:

Используйте firebug или dom insperctor, чтобы узнать, что такое typeof prop

 console.log(typeof prop);
  

и, может быть, вы тоже можете попробовать это

 if(prop != null) {

}
  

или

 if(typeof prop != undefined) {
}
  

зависит от того, что вы пытаетесь сделать на самом деле/

Ответ №3:

Я полагаю, вам просто нужно удалить кавычки из ‘null’