Javascript устанавливает переменную, если undefined
Я знаю, что я могу проверить переменную javascript, а затем определить ее, если она undefined, но не существует какой-то способ сказать
var setVariable = localStorage.getItem('value') || 0;
кажется гораздо более понятным, и я уверен, что видел это на других языках.
Ответы
Ответ 1
Да, он может это сделать, но, строго говоря, это назначит значение по умолчанию, если искомое значение ложно, а не действительно undefined. Следовательно, это не только соответствует undefined
, но также null
, false
, 0
, NaN
, ""
(но не "0"
).
Если вы хотите установить значение по умолчанию, только если переменная строго undefined
, то самым безопасным способом является запись:
var x = (typeof x === 'undefined') ? def_val : x;
В новых браузерах действительно безопасно писать:
var x = (x === undefined) ? def_val : x;
но имейте в виду, что можно обойти это на более старых браузерах, где разрешено объявлять переменную с именем undefined
, которая имеет определенное значение, в результате чего тест завершился с ошибкой.
Ответ 2
Ответ 2016 ES6:
return Object.is(x, undefined) ? y : x;
Если переменная x не определена, вернуть переменную y... в противном случае, если переменная x определена, вернуть переменную x.
Ответ 3
Кажется более логичным проверить typeof
вместо undefined
? Я предполагаю, что вы ожидаете число, когда вы устанавливаете var в 0
, когда undefined:
var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;
В этом случае, если getVariable
не является числом (string, object, whatever), setVariable имеет значение 0
Ответ 4
Мне нужно было "установить переменную, если undefined" в нескольких местах. Я создал функцию с использованием ответа @Alnitak. Надеюсь, это поможет кому-то.
function setDefaultVal(value, defaultValue){
return (value === undefined) ? defaultValue : value;
}
Использование:
hasPoints = setDefaultVal(this.hasPoints, true);
Ответ 5
var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
Ответ 6
В этот же сценарий и сегодня, где я не хочу, чтобы нуль был перезаписан для нескольких значений. У нас есть файл с некоторыми распространенными методами утилиты для таких сценариев. Здесь я добавил, чтобы обработать сценарий и быть гибким.
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;
}
}
Затем он может быть вызван с последними двумя параметрами, которые являются необязательными, если я хочу только установить для значений undefined или также перезаписать нулевые или 0 значения. Здесь приведен пример вызова, который установит идентификатор в -1, если идентификатор undefined или null, но не будет перезаписывать значение 0.
data.ID = Util.getIfNotSet(data.ID, -1, true);
Ответ 7
Если вы поклонник FP, у Ramda есть полезная вспомогательная функция для этого по умолчанию defaultTo:
использование:
const result = defaultTo(30)(value)
Это более полезно при работе с undefined
логическими значениями:
const result2 = defaultTo(false)(dashboard.someValue)
Ответ 8
Работает, даже если значением по умолчанию является логическое значение:
var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );