74

JSLint はこれを有効なコードとして渡しません:

/* global someVar: false */
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}

正しい方法は何ですか?

4

11 に答える 11

97
/*global window */

if (window.someVar === undefined) {
    window.someVar = 123456;
}

if (!window.hasOwnProperty('someVar')) {
    window.someVar = 123456;
}
于 2012-07-21T22:39:26.203 に答える
15
/**
 * @param {string} nameOfVariable
 */
function globalExists(nameOfVariable) {
    return nameOfVariable in window
}

グローバル変数を var foo または window.foo のどちらで作成したかは問題ではありません — グローバル コンテキストで var を使用して作成された変数は、window に書き込まれます。

于 2012-07-21T22:30:01.857 に答える
14

まだ存在しない場合にのみグローバル変数を割り当てたい場合は、次を試してください。

window.someVar = window.someVar || 'hi';

また

window['someVar'] = window['someVar'] || 'hi';
于 2012-07-21T22:43:10.170 に答える
9

試す

variableName in window

また

typeof window[variableName] != 'undefined'

また

window[variableName] !== undefined

また

window.hasOwnProperty(variableName)
于 2012-07-21T22:35:07.163 に答える
9

これは実際にはJSLintの問題だと思います。次のエラーが発生します。

予期しない 'typeof' です。「未定義」と直接比較してください。

これは悪いアドバイスだと思います。JavaScript ではundefined、通常未定義のグローバル変数です。ただし、一部のブラウザでは、次のようにスクリプトで変更できますwindow.undefined = 'defined'。この場合、 と直接比較すると、undefined予期しない結果が生じる可能性があります。幸いなことに、現在の ECMA 5 準拠のブラウザーでは、への割り当てが許可されていませんundefined(厳密モードでは例外がスローされます)。

typeof someVar === "undefined"あなたが投稿したように、またはsomeVar in windowスーセイが提案したように、私は好きです。

于 2012-07-21T22:37:18.127 に答える
6
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}

someVar(ローカルまたはグローバル)が未定義かどうかを確認します。

グローバル変数を確認したい場合は、使用できます

if(window['someVar'] === undefined) {
    ...
}

これがブラウザにあると仮定します:)

于 2012-07-21T22:34:03.883 に答える
1

これは、チェックを実行する簡単な方法です。

variableNameただし、が宣言され、 が割り当てられている場合、このチェックは失敗します。boolean value: false

if(window.variableName){

}
于 2014-05-13T06:39:38.080 に答える
1

bfavaretto は正しくありません。

グローバル undefined を値に設定しても、オブジェクトのテストは undefined に対して変更されません。お気に入りのブラウザーの 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".
于 2012-09-24T11:44:36.123 に答える