/*
Если переменная локальная,
то есть была объявлена при помощи var
тогда проверить можно так:
*/
if (variable !== undefined) {
...
}
/* если же переменная глобальная, то */
if (window.variable !== undefined) {
...
}
Походу во всём рунете нет конструктивного ответа на этот вопрос. Все знают что проверить наличие переменной в стеке можно с помощью typeof , но как дело доходит до структурных типов: например typeof defindevar.undefinedvar === 'undefined' - всё это дело сразу улетает в эксепшен и умирает.
Такие проверки актуальны только если переменная обьявленна но еще не определенна. Если же переменная еще не обьявленна, то интерпритатор скрипта падает не входя в функцию.
Вот пример для проверки не обьявленных глобальных переменных.
/* 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();
пользуйтесь, сам писал, часто использую, все прекрасно работает.
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;
}
редактнул свою функцию... убрал излишний цикл, вообще если бы сюда не написал то не заметил бы )) ловите код. теперь она проверяет не только переменную а и функции и вообще все что может только быть, определенным образом, можно проверить ею если пофантазировать.
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;
}
для тех кто бут придираться, на будущее)) , в коментах не дата создания а дата последней модификации.
а по поводу того что если у вас стоит задача проверить переменную или функцию которые могут быть вообще не обявлены, то это решаеться следующим образом (конечно используя и вышеописанную функцию):
Походу во всём рунете нет конструктивного ответа на этот вопрос. Все знают что проверить наличие переменной в стеке можно с помощью typeof , но как дело доходит до структурных типов: например typeof defindevar.undefinedvar === 'undefined' - всё это дело сразу улетает в эксепшен и умирает.
Такие проверки актуальны только если переменная обьявленна но еще не определенна. Если же переменная еще не обьявленна, то интерпритатор скрипта падает не входя в функцию.
Вот пример для проверки не обьявленных глобальных переменных.
/* 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();Какой смысл начинать цикл с нуля и использовать в нём только (i+1)?
и
в теле цикла ну совсем ни к чему
Как альтернатива:
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')
пользуйтесь, сам писал, часто использую, все прекрасно работает.
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; }редактнул свою функцию... убрал излишний цикл, вообще если бы сюда не написал то не заметил бы )) ловите код. теперь она проверяет не только переменную а и функции и вообще все что может только быть, определенным образом, можно проверить ею если пофантазировать.
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);вообщем вот и все, пользуйтесь на здоровье!