2016-03-10 1 views
0

Я использую хранилище сеансов для установки ключа, который может принимать числовые значения или null. Я заметил, что поле хранится как строка, независимо от того, что я вставляю. Есть ли хороший способ конвертировать обратно сохраненное значение в null?Включить «null» как null в javascript

Например, я хочу сделать проверку в моем коде, как например:

if (!sessionStorage.getItem('key')) { 
    // do something 
} 

Что лучший способ сделать это проверить? Очевидный способ был бы

if (!sessionStorage.getItem('key') !== "null") { 
     // do something 
} 

мне интересно, если есть альтернатива.

+1

Почему вы не просто использовать ('ключ') '' sessionStorage.removeItem вместо ' 'ключ' sessionStorage.setItem ('нулевой') '? – SeinopSys

+0

Для моего варианта использования его проще управлять. У меня есть раскрывающееся меню, чтобы изменить значение «ключ». он привязан к событию listerner, поэтому было бы странно в одном случае сделать удаление, а во всех остальных случаях установить значение no? – QuantumLicht

+0

localStorage только сохраняет строки, у него нет понятия типов JavaScript, поэтому вы должны действительно проверять определенную строку, будь то 'null',' not set', '0' или что бы вы ни выбрали, или просто удалить элемент и убедитесь, что он не установлен. – adeneo

ответ

1

Я просто хочу что-то, что бы оценить ложному

Вы можете использовать пустую строку вместо того, чтобы пометить отключенное значение:

sessionStorage.setItem('key',''); 

Таким образом, вы можете повторно использовать ток проверьте:

if (!sessionStorage.getItem('key')) { 
    // do something 
} 

Тем не менее, вы упомянули, что у вас есть выпадающее меню для выбора значений, и поэтому вам нужно такое значение, но я думаю, что решение, связанное с удалением элемента по нулевому значению, было бы лучше. Here's a working demo и код, используемый, чтобы сделать это:

var dd = document.getElementById('dropdown'); 

dd.addEventListener('change', function(){ 
    var value = this.value; 
    if (value === 'null') 
    sessionStorage.removeItem('key'); 
    else sessionStorage.setItem('key', value); 
}); 

var check = document.getElementById('check'); 
check.addEventListener('click', function(){ 
    this.innerHTML = 'Value: '+sessionStorage.getItem('key')+ 
        ', check: '+(!sessionStorage.getItem('key')); 
}); 
<select id="dropdown"> 
    <option value="null">none</option> 
    <option>1</option> 
    <option>2</option> 
    <option>3</option> 
    <option>4</option> 
    <option>5</option> 
</select> 

<button id="check">Check value</button> 
1

Вы можете разобрать его

JSON.parse('null') // null 
JSON.parse('1') // 1 

так

var val = sessionStorage.getItem('key'); 
val = JSON.parse(val); 

Закрыть бросить

Альтернатива будет:

var val = sessionStorage.getItem('key'); 
val = val*1 || null; 
+0

Будет работать в этих двух случаях, но что, если значение является строкой? 'JSON.parse (« Hello »);' не работает. – OptimusCrime

+0

@OptimusCrime он хранит 'numbers' или' null', это то, что было описано – kidwon

+0

Gotcha. Я пропустил эту часть. Угадайте, что это хороший, рабочий, хак. – OptimusCrime

0

sessionStorage представляет собой базу данных ключ-значение, где филиал th хранятся в виде строк. Вы можете увидеть документацию, содержащую DOMString как для Storage.setItem(), так и для Storage.getItem().

Характер этого заключается в том, что объекты, которые вы извлекаете, всегда будут строками. Вам нужно будет вручную их вручную нанести JSON.parse() или полностью ручной подход. Нет никакого способа вернуть null без каких-либо операций.

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

+0

Хорошо, я ожидаю, что сделаю операцию. Кажется, JSON.parse - это путь. На самом деле, в моем случае, я просто хочу что-то, что будет оцениваться как ложное. – QuantumLicht

+0

Технически вы также можете «eval». –

-1

С возвращенных заявлений в строках можно сказать if(!sessionStorage.setItem('key','')) {}

2

сериализовать значение как JSON перед записью его на хранение.

var json = JSON.stringify(val); 

Затем проанализируйте его, когда вы его снова прочитаете.

try { 
    var val = JSON.parse(storage.item); 
} catch(ex) { 
    // handle errors 
} 

Важно, чтобы обернуть парсер в блок try. Если пользователь или браузер очистит хранилище сеансов, вы попытаетесь сделать JSON.parse('undefined'), который выдает ошибку.

 Смежные вопросы

  • Нет связанных вопросов^_^