JSLintはこれを有効なコードとして渡していません。
/* global someVar: false */
if (typeof someVar === "undefined") {
var someVar = "hi!";
}
正しい方法は何ですか?
/*global window */
if (window.someVar === undefined) {
window.someVar = 123456;
}
if (!window.hasOwnProperty('someVar')) {
window.someVar = 123456;
}
/**
* @param {string} nameOfVariable
*/
function globalExists(nameOfVariable) {
return nameOfVariable in window
}
Var fooでグローバル変数を作成したかwindow.fooで作成したかは関係ありません。グローバルコンテキストでvarを使用して作成された変数はwindowに書き込まれます。
グローバル変数がまだ存在しない場合にのみグローバル変数を割り当てたい場合は、次を試してください:
window.someVar = window.someVar || 'hi';
または
window['someVar'] = window['someVar'] || 'hi';
試してみる
variableName in window
または
typeof window[variableName] != 'undefined'
または
window[variableName] !== undefined
または
window.hasOwnProperty(variableName)
これは実際にはJSLintの問題だと思います。次のエラーが発行されます。
予期しない「typeof」。 「未定義」と直接比較してください。
これは悪いアドバイスだと思います。 JavaScriptでは、undefined
はグローバル変数であり、通常は未定義です。ただし、一部のブラウザでは、次のようにスクリプトによる変更が許可されています:window.undefined = 'defined'
。この場合、undefined
と直接比較すると、予期しない結果が生じる可能性があります。幸いなことに、現在のECMA 5準拠のブラウザーは、undefined
への割り当てを許可していません(そして、厳格モードで例外をスローします)。
typeof someVar === "undefined"
、投稿したとおり、またはsomeVar in window
スーセイが示唆したように。
if (typeof someVar === "undefined") { var someVar = "hi!"; }
someVar
(ローカルまたはグローバル)が未定義かどうかを確認します。
グローバル変数を確認したい場合は、使用できます
if(window['someVar'] === undefined) {
...
}
これがブラウザにあると仮定します:)
bfavarettoは正しくありません。
グローバル未定義を値に設定しても、未定義に対するオブジェクトのテストは変更されません。お気に入りのブラウザのJavaScriptコンソールでこれを試してください。
var udef; var idef = 42;
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
window.undefined = 'defined';
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
これは、JavaScriptがすべてを無視し、未定義の変数に設定しようとした値があるためです。
window.undefined = 'defined';
alert(window.undefined); // Alerts "undefined".
これはチェックを実行する簡単な方法です。
ただし、variableName
が宣言され、boolean value: false
が割り当てられている場合、このチェックは失敗します。
if(window.variableName){
}