Как проверить, установлен ли элемент хранилища?

179

Как проверить, установлен ли элемент в localStorage? В настоящее время я использую

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) {
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}
  • 2
    кажется, у вас будет проблема без мьютекса памяти
Теги:
local-storage

9 ответов

322
Лучший ответ

Метод getItem в спецификации WebStorage явно возвращает null, если элемент не существует:

... Если данный ключ не существует в списке, связанном с объектом, тогда этот метод должен вернуть значение null....

Итак, вы можете:

if (localStorage.getItem("infiniteScrollEnabled") === null) {
  //...
}

Смотрите этот вопрос:

  • 1
    Не могли бы вы добавить свой собственный метод в localStorage для инкапсуляции этого небольшого теста? Например, localStorage.hasItem("infiniteScrollEnabled") ?
  • 2
    @Paul: Да, вы могли бы даже дополнить объект Storage.prototype , но, как правило, я всегда рекомендую не изменять объекты, которыми вы не владеете , в особенности хост-объекты.
Показать ещё 7 комментариев
11

Самый короткий способ - использовать значение по умолчанию, если ключ не находится в памяти:

var sValue = localStorage['my.token'] || ''; /* for strings */
var iValue = localStorage['my.token'] || 0; /* for integers */
4

Вы также можете попробовать это, если хотите проверить undefined:

if (localStorage.user === undefined) {
    localStorage.user = "username";
}

getItem - это метод, который возвращает значение null, если значение не найдено.

2

Как можно проверить существование элемента в localSotorage? это одна работа в Internet Explorer

<script>
    try{
        localStorage.getItem("username");
    }catch(e){
        alert("we are in catch "+e.print);
    }
</script>
  • 2
    Это конечно не должно; getItem просто возвращает ноль для ключей, которые не существуют.
  • 0
    У меня была та же проблема с IE, и это исправление, ++
Показать ещё 1 комментарий
1

Вы можете использовать метод hasOwnProperty для проверки этого

> localStorage.setItem('foo', 123)
undefined
> localStorage.hasOwnProperty('foo')
true
> localStorage.hasOwnProperty('bar')
false

Работает в текущих версиях Chrome (Mac), Firefox (Mac) и Safari.

  • 2
    Это должен быть принятый ответ. Принятый будет считать сохраненное «нулевое» значение не установленным, что неверно.
  • 4
    @FlavienVolken Вы не можете иметь сохраненное null значение, хотя. Вы можете иметь значение "null" , но код там не будет работать неправильно, в то время как этот код не будет работать с ключом length .
Показать ещё 2 комментария
1

Для TRUE

localStorage.infiniteScrollEnabled = 1;

ДЛЯ ЛОЖЬ

localStorage.removeItem("infiniteScrollEnabled")

ПРОВЕРИТЬ СУММЫ

if (localStorage[""infiniteScrollEnabled""]) {
  //CODE IF ENABLED
}
0

Вы должны проверить тип элемента в localStorage

if(localStorage.token !== null) {
   // this will only work if the token is set in the localStorage
}

if(typeof localStorage.token !== 'undefined') {
  // do something with token
}

if(typeof localStorage.token === 'undefined') {
  // token doesn't exist in the localStorage, maybe set it?
}
0
if(!localStorage.hash) localStorage.hash = "thinkdj";

или

var secret =  localStorage.hash || 42;
  • 0
    Это работает. Почему отрицательный голос?
  • 0
    JavaScript возвращает первое ненулевое или положительное значение. Примеры: [null || «abc»] вернет «abc» [2 || 5] вернет 2 [0 || 5] вернет 5 [1 || 5] вернет 1 и т. Д. Следовательно, приведенный выше код работает.
0
localStorage['root2']=null;

localStorage.getItem("root2") === null //false

Может быть, лучше сделать сканирование плана?

localStorage['root1']=187;
187
'root1' in localStorage
true

Ещё вопросы

Сообщество Overcoder
Наверх
Меню