Как проверить, загружена ли переменная в JavaScript? - PullRequest
25 голосов
/ 18 сентября 2008

Как узнать, был ли загружен определенный объект, и если нет, как его можно загрузить, как показано ниже?

if (!isObjectLoaded(someVar)) {
    someVar= loadObject();
}

Ответы [ 10 ]

37 голосов
/ 18 сентября 2008

Если это объект, вы должны просто проверить, является ли он null или undefined , а затем загрузить его, если он есть.

if (myObject === null || myObject === undefined) {
   myObject = loadObject();
}

Использование функции typeof также является опцией, поскольку она возвращает тип предоставленного объекта. Тем не менее, он вернет null или undefined , если объект не был загружен, поэтому он может немного сводиться к личным предпочтениям в отношении читабельности.

27 голосов
/ 18 сентября 2008
if(typeof(o) != 'object') o = loadObject();
4 голосов
/ 31 октября 2010
myObject = myObject || loadObject();
3 голосов
/ 19 сентября 2008

Если под загруженным вы подразумеваете определение, вы можете проверить тип переменной с помощью функции typeof. HOWEVER typeof имеет несколько причуд и идентифицирует Объект, Массив и null как объект

alert(typeof(null));

Определение нуля как определенного объекта может привести к сбою вашей программы, поэтому проверьте что-то вроде

if(null !== x && 'object' == typeof(x)){
    alert("Hey, It's an object or an array; good enough!");
}
3 голосов
/ 18 сентября 2008

Возможно, вы захотите узнать, определен ли данный объект

Особенно, если это делается в асинхронном потоке с setTimeout, чтобы проверить, когда он появляется.

  var generate = function()
  { 
      window.foo = {}; 
  }; 
  var i = 0;
  var detect = function()
  {
     if( typeof window.foo == "undefined" ) 
     {
           alert( "Created!"); 
           clearInterval( i );
     }
   };
   setTimeout( generate, 15000 ); 
   i = setInterval( detect, 100 ); 

теоретически должен определять, когда появляется window.foo.

3 голосов
/ 18 сентября 2008

Я не уверен, что вы подразумеваете под "загружен" ... переменная object существует и просто не имеет требуемого типа? В этом случае вам нужно что-то вроде:

function isObjectType(obj, type) {
    return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor);
}

и затем используйте if (isObjectType(object, MyType)) { object = loadObject(); }.

Если object не заполнено чем-либо до теста (то есть - typeof object === 'undefined'), тогда вам просто нужно:

if ('undefined' === typeof object) { object = loadObject(); }
2 голосов
/ 18 сентября 2008

Вы также можете просто использовать ярлык if(obj)

2 голосов
/ 18 сентября 2008

Если вы хотите обнаружить пользовательский объект:

// craete a custom object
function MyObject(){

}

// check if it's the right kind of object
if(!(object instanceof MyObject)){
   object = new MyObject();
}
1 голос
/ 23 сентября 2012
if (!("someVar" in window)) {
  someVar = loadObject();
}

сообщит вам, был ли какой-либо JS ранее назначен глобальному someVar или объявлен верхним уровнем var someVar.

Это будет работать, даже если загруженное значение равно undefined.

1 голос
/ 18 сентября 2008

typeof(obj) вернул бы "объект" для объекта класса среди других возможных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...