Как определить, является ли переменная undefined
или null
?
Мой код выглядит следующим образом:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
Но если я сделаю это, интерпретатор JavaScript останавливает выполнение.
Ответы:
Вы можете использовать качества оператора абстрактного равенства, чтобы сделать это:
Потому что
null == undefined
это правда, приведенный выше код будет ловить обаnull
иundefined
.источник
const y = undefined; y == null;
оно должно вернутьсяtrue
y
константу, но вы сравниваетеabc
(неy
). Когда я тестировалy
черезconsole.log(y == null);
Chrome и Firefox, я получилtrue
результат. Если вы получили ошибку, то, возможно, вы попытались использовать оператор присваивания=
вместо сравнения,==
что имело бы смысл возвращать ошибку, посколькуconst
не может быть переназначено.null
илиundefined
пройдет, если переменная равна0
? Вопрос не в проверке истинного значения, а в явном тестировании дляnull
илиundefined
.Стандартный способ поймать
null
иundefined
одновременно это:- который на 100% эквивалентен более явному, но менее лаконичному:
При написании профессиональных JS считается само собой разумеющимся, что равенство типов и поведение
==
vs===
понятны. Поэтому мы используем==
и сравниваем только сnull
.Редактировать снова
Комментарии, предлагающие использование
typeof
просто ошибочны. Да, мое решение выше вызовет ReferenceError, если переменная не существует. Это хорошая вещь. Эта ReferenceError желательна: она поможет вам найти свои ошибки и исправить их до того, как вы отправите свой код, точно так же, как ошибки компилятора в других языках. Используйтеtry
/,catch
если вы работаете с вводом, который вы не можете контролировать.В вашем коде не должно быть ссылок на необъявленные переменные.
источник
!==
вместо!=
.undefined
, как любая объявленная, но неинициализированная переменная, т.var someVar;
Объединяя вышеприведенные ответы, представляется, что наиболее полным ответом будет:
Это должно работать для любой переменной, которая либо необъявлена, либо объявлена, и для нее явно установлено значение null или undefined. Булево выражение должно иметь значение false для любой объявленной переменной, которая имеет фактическое ненулевое значение.
источник
typeof
это оператор, а не функция, поэтому ему не нужны скобки, но я все же ценю скобки - просто для ясности чтения.variable == null
источник
undefined
оценивается равнымnull
./*jshint eqnull:true */
в начало вашего документа или функции JS, и JSHint перестанет предупреждать вас о вашем использовании== null
.==
работает. Принуждениеif(variable == null)
в этом ответе имеет для меня полный смысл ...будет иметь значение true, если значение не равно:
значение NULL
не определено
NaN
пустой строкой ("")
0
ложный
источник
if (EmpName)
. Если это ужеundefined
будет обманом.var EmpName; if (EmpName)
. Где переменная определена, но ей не присвоено значение.attr()
Функция jQuery возвращает либо пустую строку, либо фактическое значение (и никогдаnull
илиundefined
). Единственный раз, когда он возвращаетundefined
, когда ваш селектор не вернул ни одного элемента.Таким образом, вы можете проверить на пустую строку. В качестве альтернативы, поскольку пустые строки, null и undefined имеют значение false-y, вы можете просто сделать это:
источник
ReferenceError: EmpName is not defined
undefined
если атрибут не существует в элементе (а не только в том случае, если селектор не имеет совпадающих элементов согласно ответу). Например, «img
без»src
будет возвращатьсяundefined
для$('img').attr('src');
Я пришел написать свою собственную функцию для этого. JavaScript странный.
Это применимо буквально на что угодно. (Обратите внимание, что это также проверяет, содержит ли переменная какие-либо используемые значения . Но так как эта информация обычно также необходима, я думаю, что это стоит опубликовать). Пожалуйста, рассмотрите возможность оставить записку.
Машинопись-совместимый.
Эта функция должна делать точно то же самое , как в PHP
empty()
функции (смRETURN VALUES
)Считает
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
как пустые."0.0"
,NaN
," "
,true
Считаются не пусто.источник
{ }
. Это распространенная и глупая языковая проблема, но я забыл об этом. Во всех моих поисках отображаются ответы на неопределенное значение NULL или сравнение с отсутствующим равенством (==), но нет строгого равенства (===) или аналога. И вот здесь, в вашем рейтинге с рейтингом -1 в самом низу страницы (до того, как я проголосовал), есть ответ, который ускользнул от меня.Object.keys( obj ).length < 1
или, может быть, === 0, при условии, что это никогда не будет -1. Во всяком случае, проголосовал за 0, Ву. : p==
чтобы===
здесь, то это было бы разумно функция.Если переменная, которую вы хотите проверить, является глобальной, выполните
Этот способ проверки не выдаст ошибку, даже если
yourVarName
переменная не существует.Пример: я хочу знать, поддерживает ли мой браузер History API
Как это работает:
window
является объектом, который содержит все глобальные переменные в качестве своих свойств, и в JavaScript допустимо пытаться получить доступ к несуществующему свойству объекта. Еслиhistory
не существует, тоwindow.history
возвращаетсяundefined
.undefined
является ложным, поэтому код вif(undefined){}
блоке не будет работать.источник
null
илиundefined
, и не будет работать, если ваш JavaScript работает вне браузера (то есть в Node.js). Он также будет относиться к глобальным переменным, установленным на0
,false
или''
таким же, как и для необъявленных глобальныхundefined
илиnull
, что обычно нормально.Самый короткий и простой:
это оценит как true, если EmpName:
источник
Вероятно, самый короткий способ сделать это:
Вот доказательство:
Показать фрагмент кода
А вот более подробная информация о
==
(источник здесь )БОНУС : причина, почему
===
яснее==
(см. Ответ agc )источник
У меня только что была эта проблема, т.е. проверка, является ли объект нулевым.
Я просто использую это:
Например:
источник
Поскольку вы используете jQuery , вы можете определить, является ли переменная неопределенной или ее значение равно нулю, используя одну функцию.
источник
ReferenceError: s is not defined
для первого примера.Элемент проверки jQuery не нулевой:
источник
В JavaScript, насколько мне известно, мы можем проверить неопределенную, нулевую или пустую переменную, как показано ниже.
Проверьте все условия:
источник
var
это зарезервированное слово, это броситSyntaxError
Вы можете просто использовать следующее (я знаю, что есть более короткие способы сделать это, но это может облегчить визуальное наблюдение, по крайней мере, для тех, кто смотрит на код).
источник
Самый простой способ проверить это:
источник
false
, которое потенциально нежелательно.undefined
,null
и несколько других вещей , как пустая строка, +0, -0NaN
иfalse
получить.!
оператор заставляет операнд здесьvariable
- к булеву: ecma-international.org/ecma-262/#sec-tobooleanС решением ниже:
Я могу проверить следующее:
источник
Чтобы проверить, является ли переменная нулевой или неопределенной, я использую приведенный ниже код.
источник
typeof
и сравнитьundefined
прямо, а не как строку. Это работает, но дополнительный оператор не имеет никакого эффекта, кроме как сделать его более многословным.Я запускаю этот тест в консоли Chrome. Используя (void 0) вы можете проверить undefined:
источник
Давайте посмотрим на это,
Выше переменная объявляется только как
apple
. В этом случае, если мы вызовем метод,alert
он будет отображаться как неопределенный.Во втором он отображает ноль, потому что переменная
apple
значения равна нулю.Таким образом, вы можете проверить, является ли значение неопределенным или нулевым.
источник
Лучший способ:
источник
Потому что === проверяет как тип, так и значение. Типы обоих разные, но значение одинаковое.
источник
источник
typeof
никогда не уступитundefined
, только строка'undefined'
. Более того,i == null
уже верно, еслиi
естьundefined
, поэтому второй логический тип будет избыточным, даже если он сработает.foo == null
Чек должен сделать трюк и решить «неопределенный или нулевой» случай в кратчайшему. (Не учитывая случай «foo не объявлен».) Но люди, которые привыкли иметь 3 равных (как лучшая практика), могут не принять это. Просто посмотрите на правила eqeqeq или triple-equals в eslint и tslint ...Явный подход, когда мы проверяем, является ли переменная
undefined
илиnull
отдельно, должен применяться в этом случае, и мой вклад в тему (27 неотрицательных ответов на данный момент!) Заключается в использованииvoid 0
как короткого, так и безопасного способа выполнения проверки дляundefined
.Использование
foo === undefined
небезопасно, поскольку undefined не является зарезервированным словом и может быть скрыт ( MDN ). Использованиеtypeof === 'undefined'
check безопасно, но если мы не собираемся заботиться о случае foo-is-undeclared, можно использовать следующий подход:источник
если вы создаете функцию для проверки:
источник
Вызов typeof null возвращает значение «object», поскольку специальное значение null считается пустой ссылкой на объект. Safari до версии 5 и Chrome до версии 7 имеют причуду, при которой вызов typeof для регулярного выражения возвращает «функцию», в то время как все другие браузеры возвращают «объект».
источник
Вы можете использовать только второй: он будет проверять как определение, так и объявление
источник
Я все еще думаю, что лучший / безопасный способ проверить эти два условия - привести значение к строке:
источник
Вы можете проверить, является ли значение неопределенным или нулевым, просто используя typeof:
источник
null
. Я не понимаю, почему новые, неправильные ответы даются на вопрос, на который был дан правильный и полный ответ много лет назад. Считаете ли вы, что текущие ответы как-то недостаточны?if(x==null)
плохая идея в JavaScript. Судите по"=="
- это может вызвать неожиданное приведение типов, и оно не может быть прочитано CoffeeScript, никогда не используйте "==" или "! =" При оценке условий!if(x)
будет лучше, но будьте осторожны с 0 и "" . Это будет рассматриваться как ложный , а не равный метод с"!= null"
это верно .См. Лучшие практики JavaScript .
источник
==
для сравнения , чтобыnull
это стандартный способ ловли и в JS. Приведение типов с помощью не является риском в этом конкретном контексте, и фактически используется для достижения цели отлова одновременно и одновременно. Пожалуйста, уделите больше времени работе с языком, прежде чем предлагать неправильные и вводящие в заблуждение ответы на вопросы, которые были удовлетворительно решены много лет назад.null
undefined
==
null
undefined