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