Wie kann man überprüfen, ob eine Variable in JavaScript geladen wird?
-
01-07-2019 - |
Frage
Wie kann ich sehen, ob ein bestimmtes Objekt geladen ist, und wenn nicht, wie kann er geladen werden, wie die folgende?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
Lösung
Wenn es sich um ein Objekt, dann sollten Sie nur in der Lage sein zu überprüfen, um zu sehen, ob es ist null oder undefiniert und dann laden wenn es ist.
if (myObject === null || myObject === undefined) {
myObject = loadObject();
}
Mit dem typeof Funktion ist auch eine Option, wie es die Art der Erträge Objekt zur Verfügung gestellt. Allerdings wird es zurückgeben null oder nicht definiert , wenn das Objekt nicht geladen wurde, so könnte es kochen ein wenig auf die persönlichen Vorlieben in Bezug auf Lesbarkeit nach unten.
Andere Tipps
if(typeof(o) != 'object') o = loadObject();
myObject = myObject || loadObject();
Ich bin mir nicht sicher, was Sie durch „geladen“ bedeutet ... nicht die Variable object
existieren und haben einfach nicht die Art Sie wollen? In diesem Fall sollten Sie so etwas wie:
function isObjectType(obj, type) {
return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor);
}
und verwenden Sie dann if (isObjectType(object, MyType)) { object = loadObject(); }
.
Wenn object
nicht mit etwas, bevor Sie Ihren Test ausgefüllt ist (dh - typeof object === 'undefined'
), dann brauchen Sie nur:
if ('undefined' === typeof object) { object = loadObject(); }
Sie wollen wahrscheinlich sehen, ob ein bestimmtes Objekt ist definiert
Vor allem, wenn seine in einem asynchronen Thread mit einer SetTimeout getan zu überprüfen, wenn es sich dreht.
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 );
sollte in der Theorie erkennen, wenn window.foo in existance kommt.
Wenn durch geladene Sie definiert bedeuten, können Sie den Typ der Variablen mit der typeof Funktion überprüfen. JEDOCH typeof hat ein paar Macken, und ein Objekt, ein Array, und ein null als Objekt
identifizierenalert(typeof(null));
würde wahrscheinlich eine Null als definierte Objekt Identifizierung führt, dass Ihr Programm zum Scheitern verurteilt, so überprüfen Sie mit so etwas wie
if(null !== x && 'object' == typeof(x)){
alert("Hey, It's an object or an array; good enough!");
}
Sie können auch nur eine Verknüpfung if(obj)
verwenden
Wenn Sie ein benutzerdefiniertes Objekt erkennen:
// craete a custom object
function MyObject(){
}
// check if it's the right kind of object
if(!(object instanceof MyObject)){
object = new MyObject();
}
typeof(obj)
zurückkehren würde „Objekt“ für ein Objekt einer Klasse unter anderen möglichen Werten.
if (!("someVar" in window)) {
someVar = loadObject();
}
werden Ihnen sagen, ob irgendein JS zuvor den globalen someVar
zugewiesen hat oder erklärte ein Top-Level var someVar
.
Das funktioniert sogar, wenn der geladene Wert ist undefined
.