Просто все, что не определено в JavaScript, это undefined , не имеет значения, является ли оно свойством внутри объекта / массива или просто простой переменной ...
JavaScript имеет typeof
, что позволяет очень легко обнаружить неопределенную переменную.
Просто проверьте, если typeof whatever === 'undefined'
, и он вернет логическое значение.
Вот как пишется знаменитая функция isUndefined()
в AngularJs v.1x:
function isUndefined(value) {return typeof value === 'undefined';}
Итак, как вы видите, функция получает значение, если это значение определено, она вернет false
, в противном случае для неопределенных значений верните true
.
Итак, давайте посмотрим, какими будут результаты, когда мы передадим значения, включая свойства объекта, как показано ниже, это список переменных, которые у нас есть:
var stackoverflow = {};
stackoverflow.javascipt = 'javascript';
var today;
var self = this;
var num = 8;
var list = [1, 2, 3, 4, 5];
var y = null;
и мы проверяем их, как показано ниже, вы можете увидеть результаты перед ними в качестве комментария:
isUndefined(stackoverflow); //false
isUndefined(stackoverflow.javascipt); //false
isUndefined(today); //true
isUndefined(self); //false
isUndefined(num); //false
isUndefined(list); //false
isUndefined(y); //false
isUndefined(stackoverflow.java); //true
isUndefined(stackoverflow.php); //true
isUndefined(stackoverflow && stackoverflow.css); //true
Как вы видите, мы можем проверить что-нибудь, используя что-то подобное в нашем коде, как уже упоминалось, вы можете просто использовать typeof
в своем коде, но если вы используете его снова и снова, создайте функцию, подобную угловой выборке, которая Я разделяю и продолжаю использовать, как показано ниже, в СУХОМ коде
Также еще одна вещь, для проверки свойства объекта в реальном приложении, в котором вы не уверены, существует ли этот объект или нет, проверьте, существует ли объект первым.
Если вы проверите свойство объекта, а объект не существует, выдаст ошибку и остановит работу всего приложения.
isUndefined(x.css);
VM808:2 Uncaught ReferenceError: x is not defined(…)
Так просто, что вы можете заключить в оператор if, как показано ниже:
if(typeof x !== 'undefined') {
//do something
}
Что также равно isDefined в Angular 1.x ...
function isDefined(value) {return typeof value !== 'undefined';}
Также другие фреймворки javascript, такие как подчеркивание, имеют аналогичную проверочную проверку, но я рекомендую использовать typeof
, если вы уже не используете фреймворки.
Я также добавляю этот раздел из MDN, в котором есть полезная информация о typeof, undefined и void (0).
Строгое равенство и неопределенность
Вы можете использовать неопределенные операторы и операторы строгого равенства и неравенства, чтобы определить, имеет ли переменная
ценность. В следующем коде переменная x не определена, а
если утверждение оценивается как истинное.
var x;
if (x === undefined) {
// these statements execute
}
else {
// these statements do not execute
}
Примечание: оператор строгого равенства, а не стандартное равенство
оператор должен быть использован здесь, потому что x == undefined также проверяет, является ли
х равен нулю, а строгое равенство - нет. нуль не эквивалентно
не определено. Подробности смотрите в операторах сравнения.
Тип оператора и неопределенный
В качестве альтернативы можно использовать typeof:
var x;
if (typeof x === 'undefined') {
// these statements execute
}
Одной из причин использования typeof является то, что он не выдает ошибку, если
переменная не была объявлена.
// x has not been declared before
if (typeof x === 'undefined') { // evaluates to true without errors
// these statements execute
}
if (x === undefined) { // throws a ReferenceError
}
Однако этого вида техники следует избегать. JavaScript это
статически ограниченный язык, поэтому знание, объявлена ли переменная, может
быть прочитанным, видя, объявлено ли это в окружающем контексте.
единственное исключение - глобальная область, но глобальная область связана с
глобальный объект, поэтому проверка наличия переменной в
Глобальный контекст может быть сделан путем проверки наличия свойства на
глобальный объект (например, с помощью оператора in).
Пустой оператор и неопределенный
Оператор void является третьей альтернативой.
var x;
if (x === void 0) {
// these statements execute
}
// y has not been declared before
if (y === void 0) {
// throws a ReferenceError (in contrast to `typeof`)
}
подробнее> здесь