如何检查localstorage变量是null还是未定义?

13 javascript

我有这个代码:

var sideBar = localStorage.getItem('Sidebar');
Run Code Online (Sandbox Code Playgroud)

我想检查sideBar是否已定义,而不是if语句中的null.我有点困惑,我知道有一个:sideBar == undefinedsideBar != null

但是我有一个很好的方法来对这两个内部的if进行测试:

if (??) 
Run Code Online (Sandbox Code Playgroud)

kin*_*uta 17

检查变量是否已定义且不为null的最佳实践:

if (typeof sideBar !== 'undefined' && sideBar !== null)
Run Code Online (Sandbox Code Playgroud)

编辑意识到你没有检查某些东西是否未定义,你正在检查它是否已定义,所以再次编辑以更准确地回答你的请求


Juv*_*uve 8

  1. localStorage使用字符串来保存数据,也就是说,你总是有推理时要考虑的JavaScript字符串逻辑nullundefined等.
  2. 如果设置"sideBar",请确保不使用"falsy"值.对于只有空字符串的字符串"".如果在if检查变量之前执行其他操作(例如,某些数学),则需要考虑其他情况.

以下是一些测试,显示了JavaScript如何处理if语句中的某些值:

> ("")? true : false
false                 # empty string         -> if fails
> (0)? true : false
false                 # Number 0             -> if fails
> ("0")? true : false
true                  # String "0"           -> if succeeds
> (null)? true : false
false                 # JavaScript null      -> if fails
> ("someText")? true : false
true                  # any other String     -> if succeeds
> (" ")? true : false
true                  # a space character    -> if succeeds
Run Code Online (Sandbox Code Playgroud)

我不会使用尴尬的双重检查nullundefined.如果你直接检查结果localStorage.getItem的结果是null或者a String.如果您还将空字符串""视为"falsy",则可以使用简单的if语句:

var sideBar = localStorage.getItem('Sidebar');

if(sideBar) {
   // do something with the sideBar
}
else {
   // do something without the sideBar
}
Run Code Online (Sandbox Code Playgroud)

要真正检查sideBar从未在localStorage中设置,您需要添加对空String的检查并将其视为"已定义":

if(sideBar || sideBar === "") {
    // sideBar defined, maybe even as empty String
}
else {
    // sideBar not set in localStorage
}
Run Code Online (Sandbox Code Playgroud)


Ima*_*ghi 6

正如W3手册明确解释的那样:getItem(key)方法必须返回与给定键关联的当前值。如果给定的键在与对象关联的列表中不存在,则此方法必须返回null。

这意味着,无需检查未定义,如果未定义,则getItem()方法的结果将为null。您只需要检查null。

if (localStorage.getItem("Sidebar") !== null) {
//...
}
Run Code Online (Sandbox Code Playgroud)