#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’