13 javascript
我有这个代码:
var sideBar = localStorage.getItem('Sidebar');
Run Code Online (Sandbox Code Playgroud)
我想检查sideBar是否已定义,而不是if语句中的null.我有点困惑,我知道有一个:sideBar == undefined和sideBar != 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)
编辑意识到你没有检查某些东西是否未定义,你正在检查它是否已定义,所以再次编辑以更准确地回答你的请求
localStorage使用字符串来保存数据,也就是说,你总是有推理时要考虑的JavaScript字符串逻辑null对undefined等."".如果在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)
我不会使用尴尬的双重检查null和undefined.如果你直接检查结果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)
正如W3手册明确解释的那样:getItem(key)方法必须返回与给定键关联的当前值。如果给定的键在与对象关联的列表中不存在,则此方法必须返回null。
这意味着,无需检查未定义,如果未定义,则getItem()方法的结果将为null。您只需要检查null。
if (localStorage.getItem("Sidebar") !== null) {
//...
}
Run Code Online (Sandbox Code Playgroud)