次のように、特定のオブジェクトがロードされているかどうかを確認するには、どうすればロードできますか?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
それがオブジェクトである場合、それが null または ndefined であるかどうかを確認し、そうである場合はそれをロードすることができるはずです。
if (myObject === null || myObject === undefined) {
myObject = loadObject();
}
typeof 関数を使用することも、提供されたオブジェクトのタイプを返すため、オプションです。ただし、オブジェクトがロードされていない場合は nullまたはundefined が返されるため、読みやすさに関して個人の好みに合わせて少し煮詰められる可能性があります。
if(typeof(o) != 'object') o = loadObject();
myObject = myObject || loadObject();
ロードによって定義されたという意味の場合は、typeof関数を使用して変数のタイプを確認できます。 [〜#〜] however [〜#〜] typeofにはいくつかの癖があり、オブジェクト、配列、およびnullをオブジェクトとして識別します
alert(typeof(null));
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(); }
_
おそらく、特定のオブジェクトがdefinedかどうかを確認する必要があります。
特に、それがいつ起動するかを確認するために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の存在を検出する必要があります。
カスタムオブジェクトを検出する場合:
// craete a custom object
function MyObject(){
}
// check if it's the right kind of object
if(!(object instanceof MyObject)){
object = new MyObject();
}
ショートカットを使用することもできますif(obj)
if (!("someVar" in window)) {
someVar = loadObject();
}
jSが以前にグローバルsomeVar
に割り当てたか、最上位のvar someVar
を宣言したかどうかがわかります。
ロードされた値がundefined
であっても機能します。
typeof(obj)
は、他の可能な値の中でクラスのオブジェクトの「オブジェクト」を返します。