Skip to content

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

В JavaScript часто приходится проверять существование вложенных свойств:

js
if (
  typeof window.var1 !== "undefined" &&
  typeof window.var1.var2 !== "undefined" &&
  typeof window.var1.var2.var3 !== "undefined"
) {
  // code
}

Выглядит некрасиво. Хочется что‑то вроде isset() из PHP.

Функция isset для JS

js
function isset(base, variable) {
  var isset = false;
  var path;

  if (typeof base !== "undefined" && typeof variable !== "undefined") {
    path = variable.split(".");

    if (path.length) {
      for (var i in path) {
        if (path.hasOwnProperty(i)) {
          if (typeof base[path[i]] === "undefined") {
            console.log("undefined " + path[i]);
            return false;
          } else {
            base = base[path[i]];
          }
        }
      }

      isset = true;
    }
  }

  return isset;
}

Теперь длинное условие можно заменить одной проверкой:

js
if (isset(window, "var1.var2.var3")) {
  // code
}

Функция:

  • принимает базовый объект (base, например window);
  • принимает строку‑путь ("var1.var2.var3");
  • последовательно проходит по свойствам, возвращая true, только если все уровни определены.