私はjavascript変数をテストし、それが未定義の場合は定義できることを知っていますが、言う方法はありません
var setVariable = localStorage.getItem( 'value')|| 0;
より明確な方法のように思えます、そして私はこれを他の言語で見たことがあると確信しています。
はい、できますが、取得した値がfalseyである場合、厳密にはndefinedではなく、厳密に言えばデフォルト値を割り当てます。したがって、undefined
だけでなく、null
、false
、0
、NaN
、""
にも一致します(ただし、not"0"
)。
変数が厳密にundefined
である場合にのみデフォルトに設定する場合、最も安全な方法は次のとおりです。
var x = (typeof x === 'undefined') ? def_val : x;
新しいブラウザでは、実際に書くのは安全です:
var x = (x === undefined) ? def_val : x;
ただし、定義済みの値を持つundefined
という名前の変数を宣言することが許可されている古いブラウザーでは、これを覆すことが可能であり、テストが失敗することに注意してください。
2018 ES6の答えは:
return Object.is(x, undefined) ? y : x;
変数xが未定義の場合、変数y ...を返します。それ以外の場合、変数xが定義されている場合、変数xを返します。
typeof
の代わりにundefined
を確認する方が論理的ですか?未定義の場合、varを0
に設定するときに数値が必要になると想定しています。
var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;
この場合、getVariable
が数値(文字列、オブジェクトなど)でない場合、setVariableは0
に設定されます
いくつかの場所で「未定義の場合は変数を設定する」必要がありました。 @Alnitak answerを使用して関数を作成しました。うまくいけば誰かの助けになります。
function setDefaultVal(value, defaultValue){
return (value === undefined) ? defaultValue : value;
}
使用法:
hasPoints = setDefaultVal(this.hasPoints, true);
var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
あなたがFPファンなら、Ramdaには defaultTo と呼ばれるこれのためのきちんとしたヘルパー関数があります:
使用法:
const result = defaultTo(30)(value)
undefined
ブール値を扱う場合に便利です:
const result2 = defaultTo(false)(dashboard.someValue)
今日も、いくつかの値でゼロを上書きしたくない場合に、このシナリオを実行しました。このようなシナリオのためのいくつかの一般的なユーティリティメソッドを含むファイルがあります。ここに、シナリオを処理し、柔軟にするために追加したものを示します。
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);
私には、現在のjavascript実装では、
var [result='default']=[possiblyUndefinedValue]
(オブジェクトの分解を使用して)これを行うには良い方法です。
デフォルト値がブール値であっても機能します:
var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );