Проверка, если undefined и null в jQuery

Вопрос:Я немного запутался при проверке, если 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, и если я должен использовать !== или != и “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; }

Оцените статью
Добавить комментарий