Как проверить, загружена ли переменная в JavaScript?
Как узнать, был ли загружен определенный объект, и если нет, как его можно загрузить, как показано ниже?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
10 ответов
Если это объект, вы должны просто проверить, является ли он нулевым или неопределенным, а затем загрузить его, если он есть.
if (myObject === null || myObject === undefined) {
myObject = loadObject();
}
Использование функции typeof также является опцией, так как она возвращает тип предоставленного объекта. Тем не менее, он вернет значение null или undefined, если объект не был загружен, поэтому он может немного сводиться к личным предпочтениям в отношении читабельности.
Вы, вероятно, хотите увидеть, определен ли данный объект
Особенно, если это делается в асинхронном потоке с 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.
Если под загрузкой вы подразумеваете определение, вы можете проверить тип переменной с помощью функции typeof. ОДНАКО typeof имеет несколько причуд и идентифицирует Object, Array и null как объект.
alert(typeof(null));
Определение нуля как определенного объекта, вероятно, приведет к сбою вашей программы, поэтому проверьте что-то вроде
if(null !== x && 'object' == typeof(x)){
alert("Hey, It's an object or an array; good enough!");
}
Я не уверен, что вы подразумеваете под "загружен"... делает переменную 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(); }
Если вы хотите обнаружить пользовательский объект:
// craete a custom object
function MyObject(){
}
// check if it's the right kind of object
if(!(object instanceof MyObject)){
object = new MyObject();
}
if (!("someVar" in window)) {
someVar = loadObject();
}
скажет вам, был ли какой-либо JS ранее назначен глобальному someVar
или объявлен на высшем уровне var someVar
,
Это будет работать, даже если загруженное значение undefined
,
typeof(obj)
возвратил бы "объект" для объекта класса среди других возможных значений.