Я знаю, что могу проверить переменную javascript, а затем определить ее, если она не определена, но нет ли какого-либо способа сказать
var setVariable = localStorage.getItem ('value') || 0;
кажется намного более ясным способом, и я почти уверен, что видел это на других языках.
javascript
undefined
pedalpete
источник
источник
localStorage.getItem()
будет возникать исключение, если пользователь отключил файлы cookie (по крайней мере, в Chrome), поэтому вы можете захотеть обернуть его внутриtry...catch
предложенияОтветы:
Да, он может сделать это, но, строго говоря, он назначит значение по умолчанию, если полученное значение будет ложным , в отличие от действительно неопределенного . Было бы , следовательно , не только соответствуют ,
undefined
но иnull
,false
,0
,NaN
,""
(но не"0"
).Если вы хотите установить значение по умолчанию, только если переменная строго,
undefined
тогда самый безопасный способ - написать:В новых браузерах на самом деле безопасно писать:
но имейте в виду, что это можно подорвать в старых браузерах, где было разрешено объявить переменную
undefined
с заданным значением, что приведет к сбою теста.источник
var x = (x === undefined ? def_val : x);
как немного дольшеvar x = (typeof x === 'undefined') ? def_val : x;
. Отличается ли поведение?undefined
было переопределить, что привело к сбою теста на равенство.||
подход в строгом тесте для неопределенного, вы должны использовать явный тест дляundefined
с условным.Ответ 2016 ES6 :
Если переменная x не определена, вернуть переменную y ... в противном случае, если переменная x определена, вернуть переменную x.
источник
Object.is
не лучше, чем===
в этом случае. «Оператор === (а также оператор ==) обрабатывает числовые значения -0 и +0 как равные и рассматривает Number.NaN как не равный NaN». ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Здесь не имеет значения.Object.is
если оба операнда могут бытьNaN
.undefined
. Так===
будет работать 100% времени, а не только 98%. Преимущество в том,===
что его легче читать, особенно на первый взгляд, короче и позволяет избежать ненужного вызова метода. Лично я бы использовал толькоObject.is()
тогда, когда того требует ситуация, и предпочел бы===
во всех остальных случаях.Мне нужно было "установить переменную, если она не определена" в нескольких местах. Я создал функцию, используя ответ @Alnitak. Надеюсь, это кому-нибудь поможет.
Использование:
источник
Кажется более логичным проверить
typeof
вместоundefined
? Я предполагаю, что вы ожидаете число, когда вы устанавливаете переменную в значение0
undefined:В этом случае, если
getVariable
это не число (строка, объект, что угодно), setVariable устанавливается в0
источник
ES2020 Ответ
С оператором Nullish Coalescing Operator вы можете установить значение по умолчанию, если оно
value
равно нулю или не определено.Однако вы должны знать, что пустой оператор объединения не возвращает значение по умолчанию для других типов ложных значений, таких как
0
и''
.Обратите внимание, что поддержка браузера для оператора ограничена. По данным caniuse , поддерживается только 48,34% браузеров (по состоянию на апрель 2020 года). Поддержка Node.js была добавлена в версии 14 .
источник
Если вы поклонник FP ( функционального программирования ), у Ramda есть полезная вспомогательная функция для этого по умолчанию defaultTo :
использование:
const result = defaultTo(30)(value)
Это более полезно при работе с
undefined
логическими значениями:const result2 = defaultTo(false)(dashboard.someValue)
источник
const result = value || 30;
, за исключением того, что используется промежуточная функция и +1000 байт libvar setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
источник
localStorage.getItem('value'))
вернетсяfalse
Сегодня столкнулся с этим сценарием, где я не хотел, чтобы ноль был перезаписан для нескольких значений. У нас есть файл с некоторыми общими служебными методами для подобных сценариев. Вот что я добавил, чтобы справиться со сценарием и быть гибким.
Затем его можно вызвать с последними двумя необязательными параметрами, если я хочу установить только для неопределенных значений или также перезаписать нулевые или нулевые значения. Вот пример обращения к нему, который установит идентификатор на -1, если идентификатор не определен или равен нулю, но не перезаписывает значение 0.
источник
В наши дни вы действительно можете сделать свой подход с JS:
Так что ваш пример будет работать:
источник
Работает, даже если значением по умолчанию является логическое значение:
источник
Мне кажется, что для текущих реализаций JavaScript,
хороший способ сделать это (используя деконструкцию объекта).
источник
Логическое нулевое назначение, решение ES2020 +
Новые операторы в настоящее время добавляются в браузерах,
??=
,||=
, и&&=
. Этот пост будет посвящен??=
.Это проверяет, является ли левая сторона неопределенной или нулевой, короткое замыкание, если уже определено. Если нет, то правая сторона назначается левой переменной.
Сравнение методов
Основные примеры
Примеры объектов / массивов
?? = Поддержка браузера июль 2020 г. - .03%
?? = Документация Mozilla
|| = Документация Mozilla
&& = Документация Mozilla
источник