JavaScript проверяет, существует ли переменная (определена / инициализирована) - PullRequest
1539 голосов
/ 25 февраля 2011

Какой метод проверки, если переменная была инициализирована, является лучшим / правильным? (Предполагая, что переменная может содержать что угодно (строка, int, объект, функция и т. Д.))

if (elem) { // or !elem

или

if (typeof(elem) !== 'undefined') {

или

if (elem != null) {

Ответы [ 24 ]

11 голосов
/ 03 января 2013
if (typeof console != "undefined") {    
   ...
}

Или лучше

if ((typeof console == "object") && (typeof console.profile == "function")) {    
   console.profile(f.constructor);    
}

Работает во всех браузерах

9 голосов
/ 10 мая 2019

Краткий способ проверки переменной не объявлен (не определен):

if (typeof variable === "undefined") {
  ...
}

Я нашел это полезным для обнаружения скрипта, работающего вне браузера (без объявленной переменной window).

9 голосов
/ 28 января 2016

Чтобы внести свой вклад в дискуссию, если я знаю, что переменная должна быть строкой или объектом, я всегда предпочитаю if (!variable), так что проверяйте, не ложно ли это.Это может привести к более чистому коду, например:

if (typeof data !== "undefined" && typeof data.url === "undefined") {
    var message = 'Error receiving response';
    if (typeof data.error !== "undefined") {
        message = data.error;
    } else if (typeof data.message !== "undefined") {
        message = data.message;
    }
    alert(message); 
}

.. может быть уменьшено до:

if (data && !data.url) {
  var message = data.error || data.message || 'Error receiving response';
  alert(message)
} 
8 голосов
/ 25 февраля 2011

Трудно различить неопределенное и нулевое. Null - это значение, которое вы можете присвоить переменной, если хотите указать, что переменная не имеет конкретного значения. Undefined - это специальное значение, которое будет значением по умолчанию для неназначенных переменных.


var _undefined;
var _null = null;

alert(_undefined); 
alert(_null); 
alert(_undefined == _null);
alert(_undefined === _null);

8 голосов
/ 21 сентября 2015

Ноль - это значение в JavaScript, а typeof null возвращает "object"

Следовательно, принятый ответ не будет работать, если вы передадите нулевые значения. Если вы передаете нулевые значения, вам нужно добавить дополнительную проверку для нулевых значений:

if ((typeof variable !== "undefined") && (variable !== null))  
{
   // the variable is defined and not null
}
7 голосов
/ 27 декабря 2016

Все эти ответы (кроме решения Фреда Гандта) либо неверны, либо неполны.

Предположим, мне нужно, чтобы мой variableName; содержал значение undefined, и поэтому оно было объявлено таким образом, как var variableName;, что означает, что оно уже инициализировано ;- Как проверить, объявлено ли оно уже?

Или даже лучше - как сразу проверить, существует ли «Book1.chapter22.paragraph37» при одном вызове, но не возникает ли ошибка ссылки?

Мы делаем это, используя самый мощный оператор JasvaScript, оператор in .:

"[variable||property]" in [context||root] 
>> true||false

Во времена пиковой популярности AJAX я написал метод (позже названный) isNS(), который способен определить, существует ли пространство имен, включая глубокие тесты для имен свойств, таких как «Book1.chapter22.paragraph37» и многое другое.

Но так как оно было ранее опубликовано и из-за его большой важностион заслуживает публикации в отдельной ветке. Я не буду публиковать его здесь, но предоставлю ключевые слова ( javascript + isNS ), которые помогут вам найти исходный код со всеми необходимыми пояснениями.

7 голосов
/ 25 апреля 2014

вы можете использовать оператор typeof.

Например,

var dataSet;

alert("Variable dataSet is : " + typeof dataSet);

Выше приведенный фрагмент кода вернет вывод, как

переменная dataSet: не определено.

7 голосов
/ 30 сентября 2014

Самый надежный 'это определено' проверка с typeof

if (typeof elem === 'undefined')

Если вы просто проверяете определенную переменную, чтобы назначить значение по умолчанию, для удобного чтения одного вкладыша Вы часто можете сделать это:

elem = elem || defaultElem;

Часто это нормально использовать, см .: Идиоматический способ установки значения по умолчанию в javascript

Существует также один вкладыш, использующий ключевое слово typeof :

elem = (typeof elem === 'undefined') ? defaultElem : elem;
6 голосов
/ 17 февраля 2013

В конкретной ситуации, изложенной в вопросе,

typeof window.console === "undefined"

идентично

window.console === undefined

Я предпочитаю последнее, так как оно короче.

Обратите внимание, что мы ищем console только в глобальной области видимости (которая является window объектом во всех браузерах). В этой конкретной ситуации это желательно. Мы не хотим, чтобы console был определен в другом месте.

@ BrianKelley в своем великолепном ответе объясняет технические детали. Я только добавил недостающее заключение и переварил его во что-то более простое для чтения.

5 голосов
/ 03 июля 2015

Я использую два разных способа в зависимости от объекта.

if( !variable ){
  // variable is either
  // 1. '';
  // 2. 0;
  // 3. undefined;
  // 4. null;
  // 5. false;
}

Иногда я не хочу оценивать пустую строку как ложную, поэтому я использую этот случай

function invalid( item ){
  return (item === undefined || item === null);
}

if( invalid( variable )){
  // only here if null or undefined;
}

Если вам нужно обратное, то в первом случае переменная становится переменной !!, а в недопустимой функции === становится! =, А имена функций изменяются на notInvalid.

...