Как определить, является ли переменная "неопределенной" или "нулевой"?
как определить, является ли переменная 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 остановит выполнение.
25 ответов
вы можете использовать качества абстрактный оператор равенства для этого:
if (variable == null){
// your code here.
}
, потому что null == undefined
верно, приведенный выше код поймает оба null
и undefined
.
стандартный способ поймать null
и undefined
одновременно это:
if (variable == null) {
// do something
}
--что на 100% эквивалентно более явному, но менее краткому:
if (variable === undefined || variable === null) {
// do something
}
при написании профессионального JS, это считается само собой разумеющимся, что введите равенство и поведение ==
vs ===
- это понятно. Поэтому мы используем ==
и только по сравнению с null
.
изменить опять
комментарии, предлагающие использовать typeof
просто неправильно. Да, мое решение выше вызовет ReferenceError, если переменная не существует. это хорошо. этот ReferenceError желателен: он поможет вам найти ваши ошибки и исправить их перед отправкой кода, так же, как ошибки компилятора на других языках.
у вас не должно быть ссылок на необъявленные переменные в ваш код.
комбинируя приведенные выше ответы, кажется, наиболее полным ответом будет:
if( typeof variable === 'undefined' || variable === null ){
// Do stuff
}
Это должно работать для любой переменной, которая является необъявленной или объявленной и явно имеет значение null или undefined. Логическое выражение должно иметь значение false для любой объявленной переменной, имеющей фактическое ненулевое значение.
if (typeof EmpName != 'undefined' && EmpName) {
будет true, если значение не является:
null
неопределено
Нэн
пустая строка ("")
0
false
jQuery attr()
функция возвращает либо пустую строку, либо фактическое значение (а не null
или undefined
). Единственный раз, когда он возвращается undefined
- это когда ваш селектор не возвращает никаких элементов.
таким образом, вы можете протестировать пустую строку. Кроме того, поскольку пустые строки, null и undefined являются false-y, вы можете просто сделать это:
if (!EmpName) { //do something }
если переменная, которую вы хотите проверить, является глобальной, сделать
if (window.yourVarName) {
// Your code here
}
этот способ проверки не будет выдавать ошибку, даже если yourVarName
переменная не существует.
пример: я хочу знать, поддерживает ли мой браузер History API
if (window.history) {
history.back();
}
как это работает:
window
- это объект, который содержит все глобальные переменные в качестве своих свойств, и в JavaScript законно пытаться получить доступ к несуществующему свойству объекта. Если history
не существует тогда window.history
возвращает undefined
. undefined
является falsey, поэтому код в if(undefined){}
блок не будет работать.
я пришел, чтобы написать свою собственную функцию для этого... JavaScript-это странно
можно использовать буквально на что угодно. (Обратите внимание, что это также проверяет, содержит ли переменная какие-либо полезные значения. Но поскольку эта информация обычно также необходима,я думаю, что ее стоит опубликовать). Пожалуйста, оставьте записку.
function empty(v) {
let type = typeof v;
if(type === 'undefined') {
return true;
}
if(type=== 'boolean') {
return !v;
}
if(v === null) {
return true;
}
if(v === undefined) {
return true;
}
if(v instanceof Array) {
if(v.length < 1) {
return true;
}
}
else if(type === 'string') {
if(v.length < 1) {
return true;
}
if(v==='0') {
return true;
}
}
else if(type === 'object') {
if(Object.keys(v).length < 1) {
return true;
}
}
else if(type === 'number') {
if(v===0) {
return true;
}
}
return false;
}
машинопись-совместимый.
правка. эта функция должна делать ровно то же самое, что и PHPs empty()
функция (см. RETURN VALUES
)
считает undefined
, null
, false
, 0
, 0.0
, "0"
{}
, []
как пустые.
"0.0"
, NaN
, " "
, true
считаются непустыми.
Если вы используете jQuery, вы можете определить, является ли переменная не определена или ее значение равно null с помощью одной функции.
var s; // undefined
jQuery.isEmptyObject(s); // will return true;
s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;
// usage
if(jQuery.isEmptyObject(s)){
alert('Either variable: s is undefined or its value is null');
}else{
alert('variable: s has value ' + s);
}
s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;
у меня только что была эта проблема, т. е. проверка, является ли объект нулевым.
Я просто использую это:
if (object) { Somecode}
то есть
if (document.getElementById("enterJob"))
document.getElementById("enterJob").className += ' current';
элемент проверки jQuery не null
var dvElement = $('#dvElement');
if (dvElement.length > 0) {
//do something
}
else{
//else do something else
}
с решением ниже:
const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);
console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...
Я могу проверить следующее:
- null
- неопределено
- Нэн
- пустой
- строка ("")
- 0
- false
Я запускаю этот тест на консоли chrome, используя (void 0), вы можете проверить undefined
var c;
undefined
if(c === void 0)alert();
// output = undefined
var c = 1;
// output = undefined
if(c === void 0)alert();
// output = undefined
// check c value c
// output = 1
if(c === void 0)alert();
// output = undefined
c = undefined;
// output = undefined
if(c === void 0)alert();
// output = undefined
var i;
if(i === null || typeof i === 'undefined'){
console.log(i,'i is undefined or null')
}else{
console.log(i,'i has some value')
}
вы можете проверить, является ли значение неопределенным или нулевым, просто используя typeof:
if(typeof value == 'undefined'){
(null == undefined) // true
(null === undefined) // false
потому что === проверяет как тип, так и значение. Типа как разные, но значение одно и то же.
Я вижу, что исходный пост использовал JQuery. Поэтому я добавляю то, что я использовал в прошлом через JQuery. Обычно, когда я выполняю такую проверку, я не обязательно проверяю значение null или undefined только для этой цели. Больше похоже на " значение там, чтобы я мог выполнять действия над ним.". Поэтому для этого я использую следующее. Я не пробовал каждый тип, но я знаю, что он работает как для null, так и для undefined. Кроме того, объекты и массивы (пустая версия из них вернет true). Кроме того, конечно, если переменная не существует, вы получите исключение, но я честно пытаюсь избежать этого любой ценой. Поэтому я согласен с Aerovistae. Я хочу знать об этом в своем коде и не хочу просто пропустить его.
if ($.trim(value) != '') {
//Do Something
}
в некоторых случаях можно изменить значение undefined
. Хотя они, как правило, редки, иногда лучше всего избегать фактического использования undefined
значение.
в результате, и потому, что это быстрее писать, я привык использовать ярлык для undefined
который должен посмотреть на первое значение пустого массива. Это значение гарантированно будет примитивным значением undefined
, и можно получить доступ с помощью [][0]
.
эта проверка будет работать искать как undefined
и null
.
вот пример:
(function(undefined){
var foo = { baz: null };
console.log(foo.bar === undefined); //false
console.log(foo.bar == [][0]); //true
console.log(foo.baz == [][0]); //true
}(50))
вы можете проверить его этим методом -
if(['object','undefined'].indexOf(typeof(variable)) != -1){
console.log("variable is null or undefined.");
}
вызов typeof null возвращает значение "object", так как специальное значение null считается пустой ссылкой на объект. Safari через версию 5 и Chrome через версию 7 имеют причуду, где вызов typeof в регулярном выражении возвращает "функцию", а все другие браузеры возвращают"объект".
var x;
if (x === undefined) {
alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
alert ("not even declared.")
};
вы можете использовать только второй: поскольку он будет проверять как определение, так и объявление
Это очень старый вопрос, но я все еще думаю, что лучший / безопасный способ проверить эти 2 условия-привести значение в строку:
var EmpName = $("div#esd-names div#name").attr('class');
// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
// do something with your code
}
// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
// do something with your code
}
if(x==null)
плохая идея в javascript, судья с "=="
может вызвать непредвиденное принуждение типа и не может быть прочитан coffee-script,
никогда не использовать "==" или "!= "в состоянии суда!
if(x)
будет лучше.но будьте осторожны!--5-->0 и "", это будет относиться как false,не равный метод с "!= null"
is правда.
чтобы проверить, если переменная имеет значение null или undefined я использую ниже код.
if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){
console.log('variable is undefined or null');
}