Вопрос:
Я немного запутался при проверке, если null или undefined, и если я должен использовать !== или != и “undefined” или undefined.
Вот код, над которым я работаю. Где я буду ошибаться с моим null/unudefined и т.д.?
var c = (jQuery(this).prop(«target») != null && jQuery(this).prop(«target») != undefined && jQuery(this).prop(«target»).toLowerCase() == «_blank») ? 1 : 0;
Спасибо
Лучший ответ:
-
Оба null и undefined являются “ложными” значениями, поэтому их можно проверить, как они были логическими значениями. Таким образом, нет смысла сравнивать с null и undefined, за исключением определенных ситуаций, когда вам нужно знать, являются ли они такими значениями.
-
при сравнении, лучше использовать строгое сравнение (например, ===, !== и т.д.)
-
&& в условии не оценивает следующее условие, если предыдущий он является “ложным”.
-
Вам даже не нужен jQuery, так как this – ваш объект DOM (предположительно <a>), и вы пытаясь получить свойство target:
В конце:
var c = (this.target && this.target.toLowerCase() === «_blank») ? 1 : 0; Ответ №1
В общем, держите его простым.
Чтобы проверить undefined, используйте:
foo === undefined foo !== undefined
Чтобы проверить null, используйте:
foo === null foo !== null
Для проверки в одно и то же время используйте:
foo == null foo != null
И в любом случае сохраните свой .prop() в переменной, чтобы он был чистым. Но в вашем случае, если оно равно «_blank», то вы знаете, что это не null или undefined, поэтому:
var targ = jQuery(this).prop(«target»).toLowerCase(); var c = targ === «_blank» ? 1 : 0;
Или вы можете сделать это еще короче, принуждая boolean к number:
var targ = jQuery(this).prop(«target»).toLowerCase(); var c = +(targ === «_blank»);
Эти последние два решения безопасны, потому что .prop() всегда будет возвращать string.
Ответ №2
Это лучший способ проверить undefined:
if(typeof variable_here != ‘undefined’){ // your code here. };
И это лучший способ проверить null:
if(variable_here !== null){ // your code here. };
Итак, ваш код должен выглядеть следующим образом:
var c = (jQuery(this).prop(«target») !== null && typeof jQuery(this).prop(«target») !== ‘undefined’ && jQuery(this).prop(«target»).toLowerCase() == «_blank») ? 1 : 0; Ответ №3
Так как undefined будет типом переменной, используйте typeof
var c = ( $(this).attr(«target») != NULL && typeof $(this).attr(«target») != «undefined» && $(this).attr(«target»).toLowerCase() == «_blank» ) ? 1 : 0;
Я думаю, однако, что вам нужна последняя проверка. Цель «_blank», c должна быть 1, в противном случае 0. Действительно ли имеет значение, если target даже установлено?
Кроме того, используйте attr() для получения атрибутов, так как prop() если для таких свойств, как selectedIndex или tagName.
Ответ №4
Не получайте одно и то же свойство 3 раза, чтобы проверить значение.
var c = 0; var prop = $(this).prop(«target»); if(prop && prop.toLowerCase() === «_blank») c = 1; Ответ №5
У меня есть что-то вроде этого, которое не соответствует вашему вопросу, но поможет вам
var targ = jQuery(this).prop(«target»).toLowerCase();
теперь, если вы хотите проверить, является ли таргетинг нулевым или undefined
var c = (!targ || «») ? 1 : 0
надеюсь, что это поможет вам
Ответ №6
В JavaScript вам не требуется явно проверять, является ли переменная нулевой или неопределенной, потому что:
null или undefined возвращают false в логическом выражении. Выражения JS оцениваются слева направо. Так что для || b, если a ложно, то будет оцениваться только b. Но если a истинно, b проверяться не будет. Аналогично для a && b, если a равно false, b не будет оцениваться. Следовательно, if (a! = Null) {“сделать что-то”} можно записать так, как если бы (a) {“сделать что-то”} или просто && “сделать что-то”.
Таким же образом его можно использовать для установки значения по умолчанию, когда для него установлено значение null или undefined:
function someFunction(age){ var age= age|| 18; }