window.documentオブジェクトがnullまたは未定義の場合はありますか?
はい、ドキュメントに含まれていないJavaScriptコード(node.jsなど)の場合は可能です。ただし、そのようなコードにはウィンドウオブジェクトがない場合もあります(グローバルオブジェクトはありますが)。
W3C DOMに準拠したユーザーエージェントのHTMLドキュメントのコードの場合、いいえ。
> Are there any situations in which this piece of code will fail (i.e. throw
> an exception)?
>
> [snip jQuery code]
それはどこで失敗します:
- jQueryの準備ができた機能が失敗する(少なくとも一部のブラウザーでは、デスクトップや一部のモバイルデバイスで一般的に使用されているブラウザーではない可能性があります)。
- ない
window object
、または
window.document
オブジェクトはありません
さまざまなホストで動作するコードに自信を持ってもらうために、次のようなことを行うことができます。
if (typeof window != 'undefined' && window.document &&
window.document.readyState == whatever) {
// do stuff
}
これは書くのにそれほど余分なことではなく、おそらく一度だけ行う必要があります。
代替案:
(function (global) {
var window = global;
if (window.document && window.document.readyState == whatever) {
// do stuff
}
}(this));
と
(function (global) {
var window = global;
function checkState() {
if (window.document && window.document.readyState) {
alert(window.document.readyState);
} else {
// analyse environment
}
}
// trivial use for demonstration
checkState();
setTimeout(checkState, 1000);
}(this));