есть ли что-то вроде isset php в javascript/jQuery? [дубликат]


этот вопрос уже есть ответ здесь:

есть ли что-то в javascript/jQuery, чтобы проверить, установлена ли переменная/доступна или нет? В php мы используем isset($variable) чтобы проверить что-то вроде этого.

спасибо.

11 68

11 ответов:

попробуйте это выражение:

typeof(variable) != "undefined" && variable !== null

это будет верно, если переменная определена, а не null, что эквивалентно тому, как работает isset PHP.

Вы можете использовать его как это:

if(typeof(variable) != "undefined" && variable !== null) {
    bla();
}

JavaScript isset () на PHP JS

function isset () {
    // discuss at: http://phpjs.org/functions/isset
    // +   original by: Kevin van     Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // +   improved by: Rafał Kukawski
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    var a = arguments,
        l = a.length,
        i = 0,
        undef;

    if (l === 0) {
        throw new Error('Empty isset');
    }

    while (i !== l) {
        if (a[i] === undef || a[i] === null) {
            return false;
        }
        i++;
    }
    return true;
}

typeof будет служить цели, я думаю

if(typeof foo != "undefined"){}

Если вы хотите проверить, существует ли свойство:hasOwnProperty путь

а так как большинство объектов являются свойствами какого-то другого объекта (в конечном итоге приводит к

Не естественно, нет... Однако, погуглив вещь дала это:http://phpjs.org/functions/isset:454

http://phpjs.org/functions/isset:454

проект phpjs является надежным источником. Там доступно множество JS-эквивалентных php-функций. Я использую с давних пор и не нашел никаких проблем до сих пор.

проблема в том, что передача неопределенной переменной в функцию вызывает ошибку.

это означает, что вы должны запустить typeof перед передачей его в качестве аргумента.

самый чистый способ, который я нашел, чтобы сделать это так:

function isset(v){
    if(v === 'undefined'){
        return false;
    }
    return true;
}

использование:

if(isset(typeof(varname))){
  alert('is set');
} else {
  alert('not set');
}

теперь код намного компактнее и читабельнее.

Это все равно даст ошибку, если вы попытаетесь вызвать переменную из не созданной переменной, например:

isset(typeof(undefVar.subkey))

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

undefVar = isset(typeof(undefVar))?undefVar:{};

вот :)

function isSet(iVal){
 return (iVal!=="" && iVal!=null && iVal!==undefined && typeof(iVal) != "undefined") ? 1 : 0;
} // Returns 1 if set, 0 false

кроме @emil-vikström ответ, проверка на variable!=null относится к variable!==null а также variable!==undefined (или typeof(variable)!="undefined").

некоторые части каждого из этих ответов работы. Я скомпилировал их все вниз в функцию "isset" так же, как вопрос задавал и работает, как это делает в PHP.

// isset helper function 
var isset = function(variable){
    return typeof(variable) !== "undefined" && variable !== null && variable !== '';
}

вот пример использования как использовать:

var example = 'this is an example';
if(isset(example)){
    console.log('the example variable has a value set');
}

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

  1. typeof(variable) !== "undefined" проверяет, определена ли переменная вообще
  2. variable !== null проверяет, если переменная null (некоторые люди явно устанавливают null и не думают, что если он установлен в null, что это правильно, в этом случае удалите эту часть)
  3. variable !== '' проверяет, установлена ли переменная в пустую строку, вы можете удалить это, если пустая строка считается установленной для вашего варианта использования

надеюсь, это кому-то поможет :)

можно просто:

if(variable||variable===0){
    //Yes it is set
    //do something
}
else {
    //No it is not set
    //Or its null
    //do something else 
}