web-dev-qa-db-fra.com

Comment vérifier si une variable est chargée en JavaScript?

Comment puis-je voir si un certain objet a été chargé, et sinon, comment peut-il être chargé, comme suit?

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

S'il s'agit d'un objet, vous devriez simplement être en mesure de vérifier s'il s'agit de null ou ndefined , puis le charger s'il l'est.

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

L'utilisation de la fonction typeof est également une option car elle renvoie le type de l'objet fourni. Cependant, il retournera null ou indéfini si l'objet n'a pas été chargé, donc il pourrait se résumer un peu à vos préférences personnelles en ce qui concerne la lisibilité.

37
rjzii
if(typeof(o) != 'object') o = loadObject();
27
Tom Ritter
myObject = myObject || loadObject();
4
Bruce

Si par chargé vous voulez dire défini, vous pouvez vérifier le type de la variable avec la fonction typeof. CEPENDANT typeof a quelques bizarreries et identifiera un objet, un tableau et un null en tant qu'objet

alert(typeof(null));

L'identification d'un null en tant qu'objet défini entraînerait probablement l'échec de votre programme, alors vérifiez avec quelque chose comme

if(null !== x && 'object' == typeof(x)){
    alert("Hey, It's an object or an array; good enough!");
}
3
Alan Storm

Je ne sais pas ce que vous entendez par "chargé" ... la variable object existe-t-elle et n'a tout simplement pas le type que vous voulez? Dans ce cas, vous voudrez quelque chose comme:

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

puis utilisez if (isObjectType(object, MyType)) { object = loadObject(); }.

Si object n'est pas renseigné avec quoi que ce soit avant votre test (c'est-à-dire - typeof object === 'undefined'), Alors vous avez juste besoin de:

if ('undefined' === typeof object) { object = loadObject(); }
3
Grant Wagner

Vous voulez probablement voir si un objet donné est défini

Surtout si son fait dans un thread asynchrone avec un setTimeout pour vérifier quand il se présente.

  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 ); 

devrait en théorie détecter quand window.foo entre en existence.

3
Kent Fredric

Si vous souhaitez détecter un objet personnalisé:

// craete a custom object
function MyObject(){

}

// check if it's the right kind of object
if(!(object instanceof MyObject)){
   object = new MyObject();
}
2
Zach

Vous pouvez également utiliser simplement un raccourci if(obj)

2
ScottKoon
if (!("someVar" in window)) {
  someVar = loadObject();
}

vous indiquera si un JS a précédemment affecté au global someVar ou déclaré un niveau supérieur var someVar.

Cela fonctionnera même si la valeur chargée est undefined.

1
Mike Samuel

typeof(obj) renverrait "objet" pour un objet d'une classe parmi d'autres valeurs possibles.

1
Loren Segal