Javascript.RU

PHP-функция: isset

Пермалинк: http://javascript.ru/php/isset

Javascript:

/* 
Если переменная локальная, 
то есть была объявлена при помощи var 
тогда проверить можно так:
*/
if (variable !== undefined) {
 ...
}
/* если же переменная глобальная, то */
if (window.variable !== undefined) {
 ...
}

Примеры:

if (window.XMLHttpRequest !== undefined) { .. }


Автор: dmitlantis, дата: 19 августа, 2009 - 19:22
#permalink

Походу во всём рунете нет конструктивного ответа на этот вопрос. Все знают что проверить наличие переменной в стеке можно с помощью typeof , но как дело доходит до структурных типов: например typeof defindevar.undefinedvar === 'undefined' - всё это дело сразу улетает в эксепшен и умирает.


Автор: s4 (не зарегистрирован), дата: 21 апреля, 2010 - 16:56
#permalink

Такие проверки актуальны только если переменная обьявленна но еще не определенна. Если же переменная еще не обьявленна, то интерпритатор скрипта падает не входя в функцию.
Вот пример для проверки не обьявленных глобальных переменных.

/* isset for javascript */
window.isset = function (){
 if (arguments.length===0) return false;
 var buff=arguments[0];
 for (var i=0; i<arguments.length; i++){
  if (typeof(buff)==='undefined') return false;
  buff = buff[arguments[i+1]];
 }
 return true;
}

function test(){
 var localValue;
 console.log("window:      "+isset(window));
 console.log("globalValue: "+isset(window, "globalValue"));
 console.log("localValue:  "+isset(localValue));
 console.log("undefValue:  "+isset(window, "undefValue"));
}
var globalValue=2;
test();

Автор: Alx (не зарегистрирован), дата: 3 марта, 2011 - 15:51
#permalink

Какой смысл начинать цикл с нуля и использовать в нём только (i+1)?


Автор: Alx (не зарегистрирован), дата: 3 марта, 2011 - 15:53
#permalink

и

if (typeof(buff)==='undefined') return false;

в теле цикла ну совсем ни к чему


Автор: Andreyalek (не зарегистрирован), дата: 19 ноября, 2011 - 04:58
#permalink

Как альтернатива:

if (window.isset == undefined) {
    window.isset = function(val) {
        try {
            eval('window.isset.tmp='+val);
            return (window.isset.tmp != undefined && window.isset.tmp != null);
        } catch(e) {
            return false;
        }
    }

}

Только метод вызываем не
isset(defindevar.undefinedvar)
а
isset('defindevar.undefinedvar')


Автор: Nyko13 (не зарегистрирован), дата: 10 апреля, 2013 - 13:30
#permalink

пользуйтесь, сам писал, часто использую, все прекрасно работает.

function isset(e,tt,tt1){
    /**
     * created by Nyko13 (ug developer team) 10.04.2013.
     *
     * e:       element for test
     * tt,tt1:  ['string'] - check for empty string.
     *              return: if string isset but is empty - return false
     *          ['array'] - check for empty array.
     *              return: if array isset but is empty - return false
     *
     * function return: true - if isset
     *                  false - if not isset
     *                  0 - if can`t check
     *
     * usage note:
     *	for check jQuery element like $('div'), need use param 'array'.
     *	parameters after 'e' can be administered in any order (isset(e,'string'); isset(e,'array'); isset(e,'string','array'); - all this work fine)
     */
    var t = [];
    if(typeof tt != 'undefined'){
        t[t.length] = tt;
    }
    if(typeof tt1 != 'undefined'){
        t[t.length] = tt1;
    }
    var types = new Array('boolean','string','object','number');
    var type = typeof e;

    if(type != 'undefined' && e != null){
        for(var i=0;i<types.length;i++){
            if(types[i]==type){
                if(t.length>0){
                    for(var j=0;j<t.length;j++){
                        if(e.length<=0
                           && ((type == 'string' && t[j] == 'string')
                                || (type == 'object' && t[j] == 'array'))){
                            return false;
                        }
                    }
                }
                return true;
            }
        }
    }else{
        return false;
    }
    return 0;
}

Автор: Nyko13 (не зарегистрирован), дата: 10 апреля, 2013 - 15:03
#permalink

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

function isset(e,tt,tt1){
    /**
     * created by Nyko13 (ug developer team) 10.04.2013.
     *
     * e:       element for test
     * tt,tt1:  ['string'] - check for empty string.
     *              return: if string isset but is empty - return false
     *          ['array'] - check for empty array.
     *              return: if array isset but is empty - return false
     *
     * function return: true - if isset
     *                  false - if not isset
     *                  0 - if can`t check
     *
     * usage note:
     *	for check jQuery element like $('div'), need use param 'array'.
     *	parameters after 'e' can be administered in any order (isset(e,'string'); isset(e,'array'); isset(e,'string','array'); - all this work fine)
     */
    var t = [];
    if(typeof tt != 'undefined'){
        t[t.length] = tt;
    }
    if(typeof tt1 != 'undefined'){
        t[t.length] = tt1;
    }
    var type = typeof e;

    if(type != 'undefined' && e != null){
        if(t.length>0){
            for(var j=0;j<t.length;j++){
                if(e.length<=0
                    && ((type == 'string' && t[j] == 'string')
                    || (type == 'object' && t[j] == 'array'))){
                    return false;
                }
            }
        }
        return true;
    }else{
        return false;
    }
    return 0;
}

для тех кто бут придираться, на будущее)) , в коментах не дата создания а дата последней модификации.

а по поводу того что если у вас стоит задача проверить переменную или функцию которые могут быть вообще не обявлены, то это решаеться следующим образом (конечно используя и вышеописанную функцию):

var check;
    try{
        check = isset(test);
    }catch(e){
        check = false;
    }
    alert(check);

вообщем вот и все, пользуйтесь на здоровье!


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum