Проверка переменных в JS или аналог isset в PHP

mbaev 12.05.2017, 16:24

jsОх уж этот js... Сегодня снова пришлось углубиться в дебри JS и снова эти ужасные typeof и undefined... От одной мысли меня передёргивает. Мы же в 21ом веке живем!!! Что творится в javascript ?

  1. if (typeof window.var1 !== 'undefined' && typeof window.var1.var2 !== 'undefined' && typeof window.var1.var2.var3 !== 'undefined') {
  2.   // code
  3. }

Знакомая ситуация?

Следующее решение не претендует на премию Тьюринга или ВОИС, но работает стабильно.

  1. function isset(base, variable) {
  2.   var isset = false, path;
  3.   if (typeof base !== 'undefined' && typeof variable !== 'undefined') {
  4.     path = variable.split('.');
  5.     if (path.length) {
  6.       for (var i in path) {
  7.         if (path.hasOwnProperty(i)) {
  8.           if(typeof base[path[i]] === 'undefined'){
  9.             console.log('undefined ' + path[i]);
  10.             return false;
  11.           }
  12.           else {
  13.             base = base[path[i]];
  14.           }
  15.         }
  16.       }
  17.       isset = true;
  18.     }
  19.   }
  20.   return isset;
  21. }

Теперь условие из первого блока кода в этой статье можно сократить до следующих строк:

  1. if (isset(window, 'var1.var2.var3')) {
  2.   // code
  3. }