Come verificare se una variabile è caricata in JavaScript?
-
01-07-2019 - |
Domanda
Come posso vedere se un determinato oggetto è stato caricato e, in caso contrario, come può essere caricato, come il seguente?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
Soluzione
Se si tratta di un oggetto, dovresti essere in grado di verificare se lo è nullo O non definito e poi caricarlo se lo è.
if (myObject === null || myObject === undefined) {
myObject = loadObject();
}
Usando il tipo di anche la funzione è un'opzione in quanto restituisce il tipo dell'oggetto fornito.Tuttavia, tornerà nullo o indefinito se l'oggetto non è stato caricato, potrebbe ridursi un po' alle preferenze personali per quanto riguarda la leggibilità.
Altri suggerimenti
if(typeof(o) != 'object') o = loadObject();
myObject = myObject || loadObject();
Non ho capito cosa intendi con "caricato"...fa la variabile object
esiste e semplicemente non ha il tipo che desideri?In tal caso, ti servirà qualcosa come:
function isObjectType(obj, type) {
return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor);
}
e poi utilizzare if (isObjectType(object, MyType)) { object = loadObject(); }
.
Se object
non è popolato con nulla prima del test (cioè - typeof object === 'undefined'
) allora ti basta:
if ('undefined' === typeof object) { object = loadObject(); }
Probabilmente vorrai vedere se un determinato oggetto lo è definito
Soprattutto se viene eseguito in un thread asincrono con un setTimeout per verificare quando viene visualizzato.
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 );
dovrebbe in teoria rilevare quando window.foo entra in esistenza.
Se per caricato intendi definito, puoi verificare il tipo della variabile con la funzione typeof. TUTTAVIA typeof ha alcune stranezze e identificherà un oggetto, un array e un file nullo come oggetto
alert(typeof(null));
Identificare un null come oggetto definito probabilmente causerebbe il fallimento del tuo programma, quindi controlla con qualcosa di simile
if(null !== x && 'object' == typeof(x)){
alert("Hey, It's an object or an array; good enough!");
}
Puoi anche usare semplicemente una scorciatoia if(obj)
Se desideri rilevare un oggetto personalizzato:
// craete a custom object
function MyObject(){
}
// check if it's the right kind of object
if(!(object instanceof MyObject)){
object = new MyObject();
}
typeof(obj)
restituirebbe "oggetto" per un oggetto di una classe tra gli altri possibili valori.
if (!("someVar" in window)) {
someVar = loadObject();
}
ti dirà se qualche JS è stato precedentemente assegnato al global someVar
o dichiarato di primo livello var someVar
.
Funzionerà anche se il valore caricato lo è undefined
.