web-dev-qa-db-ja.com

未定義の場合、javascriptは変数を設定します

私はjavascript変数をテストし、それが未定義の場合は定義できることを知っていますが、言う方法はありません

 var setVariable = localStorage.getItem( 'value')|| 0; 

より明確な方法のように思えます、そして私はこれを他の言語で見たことがあると確信しています。

150
pedalpete

はい、できますが、取得した値がfalseyである場合、厳密にはndefinedではなく、厳密に言えばデフォルト値を割り当てます。したがって、undefinedだけでなく、nullfalse0NaN""にも一致します(ただし、not"0")。

変数が厳密にundefinedである場合にのみデフォルトに設定する場合、最も安全な方法は次のとおりです。

var x = (typeof x === 'undefined') ? def_val : x;

新しいブラウザでは、実際に書くのは安全です:

var x = (x === undefined) ? def_val : x;

ただし、定義済みの値を持つundefinedという名前の変数を宣言することが許可されている古いブラウザーでは、これを覆すことが可能であり、テストが失敗することに注意してください。

284
Alnitak

2018 ES6の答えは

return Object.is(x, undefined) ? y : x;

変数xが未定義の場合、変数y ...を返します。それ以外の場合、変数xが定義されている場合、変数xを返します。

22
Sterling Bourne

typeofの代わりにundefinedを確認する方が論理的ですか?未定義の場合、varを0に設定するときに数値が必要になると想定しています。

var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;

この場合、getVariableが数値(文字列、オブジェクトなど)でない場合、setVariableは0に設定されます

6
Bruno

いくつかの場所で「未定義の場合は変数を設定する」必要がありました。 @Alnitak answerを使用して関数を作成しました。うまくいけば誰かの助けになります。

function setDefaultVal(value, defaultValue){
   return (value === undefined) ? defaultValue : value;
}  

使用法:

hasPoints = setDefaultVal(this.hasPoints, true);
5
Mcestone

var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;

1
Zikes

あなたがFPファンなら、Ramdaには defaultTo と呼ばれるこれのためのきちんとしたヘルパー関数があります:

使用法:

const result = defaultTo(30)(value)

undefinedブール値を扱う場合に便利です:

const result2 = defaultTo(false)(dashboard.someValue)

0
Damian Green

今日も、いくつかの値でゼロを上書きしたくない場合に、このシナリオを実行しました。このようなシナリオのためのいくつかの一般的なユーティリティメソッドを含むファイルがあります。ここに、シナリオを処理し、柔軟にするために追加したものを示します。

function getIfNotSet(value, newValue, overwriteNull, overwriteZero) {
    if (typeof (value) === 'undefined') {
        return newValue;
    } else if (value === null && overwriteNull === true) {
        return newValue;
    } else if (value === 0 && overwriteZero === true) {
        return newValue;
    } else {
        return value;
    }
}

未定義の値のみを設定する場合、またはnullまたは0の値を上書きする場合は、最後の2つのパラメーターをオプションとして呼び出します。以下は、IDが未定義またはnullの場合にIDを-1に設定するが、0値を上書きしない呼び出しの例です。

data.ID = Util.getIfNotSet(data.ID, -1, true);
0
Mark Seefeldt

私には、現在のjavascript実装では、

var [result='default']=[possiblyUndefinedValue]

(オブジェクトの分解を使用して)これを行うには良い方法です。

0
T S

デフォルト値がブール値であっても機能します:

var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );
0
Tsz Lam Yau