저장소 항목이 설정되어 있는지 확인하는 방법


288

항목이 설정되어 있는지 어떻게 확인할 수 localStorage있습니까? 현재 사용하고 있습니다

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) {
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}

2
스토리지 뮤텍스가없는 문제가있는 것 같습니다
4esn0k

답변:


509

getItemWebStorage 사양 의 메소드 null는 항목이 존재하지 않으면 명시 적으로 리턴 합니다.

... 주어진 키가 객체와 관련된 목록에 없으면이 메서드는 null을 반환해야합니다. ...

따라서 다음을 수행 할 수 있습니다.

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

이 관련 질문을 참조하십시오 :


1
localStorage이 작은 테스트를 캡슐화 하기 위해 고유 한 방법을 추가 할 수 있습니까? 예를 들어 localStorage.hasItem("infiniteScrollEnabled")?
Paul D. Waite

4
@Paul : 예, Storage.prototype객체를 보강 할 수도 있지만 일반적으로 소유하지 않은 객체, 특히 호스트 객체를 수정하지 않는 것이 좋습니다 .
CMS

예, 좋은 지적이 있습니다. CSS 배경을 바탕으로 브라우저 문제를 직접 해결할 수 있다는 아이디어는 흥미롭지 만 브라우저 개체를 다루는 것이 혼란 스러울 수 있음을 알 수 있습니다.
Paul D. Waite

5
메모의 내용이 잘못되었습니다. 현재 버전의 Storage인터페이스에는 값의 유형이 명시되어 있습니다 DOMString. w3.org/TR/webstorage/#the-storage-interface
Alnitak

1
메모가 제거되었습니다. 감사합니다 @TimothyZorn 및 Alnitak
CMS

46

hasOwnProperty방법을 사용 하여 이것을 확인할 수 있습니다

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

Chrome (Mac), Firefox (Mac) 및 Safari의 현재 버전에서 작동합니다.


2
허용되는 답변이어야합니다. 수락 된 값은 저장된 "널"값이 설정되지 않은 것으로 간주합니다.
Flavien Volken 2018 년

9
@FlavienVolken null그래도 저장된 값을 가질 수 없습니다 . 당신은 가질 수 "null"있지만 코드는 오작동하지 않지만 length키 는 실패 합니다.
Kaiido

1
@ Kaiido 당신이 맞아요, 저장된 데이터를 직접 파싱하고 JSON.parse("null") === JSON.parse(null)충돌 이 있었기 때문에이 동작이 발생했습니다.
Flavien Volken

3
다음 ESLint 오류가 발생했습니다. "대상 object.eslint (no-prototype-builtins)에서 Object.prototype 메소드 'hasOwnProperty'에 액세스하지 마십시오"
rfdc

foo가 페이지로드에 설정되어 있지 않고 foo로 무언가를 수행하려는 경우 작동하지 않습니다. 나는 그것이 질문자가 받고있는 것이라고 생각합니다 foo.foo가 값을 가지고 있는지가 아니라 키 가 있는지 확인하고 싶습니다 . 클릭 이벤트가 .setitemgetItem을 기반으로 한 논리로 트리거되는 상황이 있지만 setItem까지 작동하지 않으며 foo의 상태 (value1 또는 value2)를 알 때까지 item을 설정할 수 없습니다. 즉, 실수로 foo exit를 확인한 후 실수로 value2를 덮어 쓰지 않으면 value1로 설정하십시오.
린과 렌

22

키가 스토리지에없는 경우 가장 짧은 방법은 기본값을 사용하는 것입니다.

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을 반환하는 메서드입니다.


3
if(!localStorage.hash) localStorage.hash = "thinkdj";

또는

var secret =  localStorage.hash || 42;

JavaScript는 널이 아닌 양의 첫 번째 값을 리턴합니다. 예 : [null || "abc"]는 "abc"를 반환합니다. [2 || 5]는 2 [0 || 5]는 5 [1 || 5]는 1 등을 반환합니다. 따라서 위의 코드가 작동합니다.
Deepak Thomas

2

localStorage.infiniteScrollEnabled = 1;

거짓

localStorage.removeItem("infiniteScrollEnabled")

존재 확인

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

1

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?
}

1

하나의 항목 존재를 어떻게 테스트 할 수 localStorage있습니까? 이 방법은 인터넷 익스플로러에서 작동합니다.

<script>
    try{
        localStorage.getItem("username");
    }catch(e){
        alert("we are in catch "+e.print);
    }
</script>

2
확실히해서는 안됩니다. getItem은 존재하지 않는 키에 대해 null을 반환합니다.
EricLaw

나는 IE와 같은 문제를 겪고 있었고, 이것이 그 해결책이다. ++
edencorbin

try | catch항목을 구문 분석 할 때 반드시해야합니다 .
압둘 사딕 얄친

0
localStorage['root2']=null;

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

계획을 스캔하는 것이 좋을까요?

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

0

내가 제안 할 수있는 가장 안전하고 안전한 방법은

if(Object.prototype.hasOwnProperty.call(localStorage, 'infiniteScrollEnabled')){
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}

이것은 ESLint의 no-prototype-builtins규칙을 통과합니다 .


0

나는 내 프로젝트에서 사용했고 나를 위해 완벽하게 작동합니다.

var returnObjName= JSON.parse(localStorage.getItem('ObjName'));
if(returnObjName && Object.keys(returnObjName).length > 0){
   //Exist data in local storage
}else{
  //Non Exist data block
}

0

쉬운 방법은

if(localStorage.test){
console.log("now defined");
}
else{
console.log("undefined");
localStorage.test="defined;"
}

작동 원리

localStorage.test를 처음 호출하면 localStorage 객체에 대한 저장소가 없으므로 정의되지 않은 else 조건 트리거를 반환합니다. 다른 트리거 후 새 변수를 설정하고 다시 데이터가 포함되어 있는지 확인하여 if 조건에서 true로 데이터를 반환합니다.


-2

이 코드를 사용해보십시오

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

} else {

}

하지 마라. "시도"는 없습니다. 좋은 대답은 그것이 OP뿐만 SO 미래의 방문자뿐만 아니라, 같은 방식으로 이루어졌다 왜 항상 일이 있었는지에 대한 설명을하고 있습니다.
Jay Blanchard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.