我有这段代码:
var sideBar = localStorage.getItem('Sidebar');
我想检查是否定义了sideBar而不是if语句中的null。我有点困惑,我知道有一个:sideBar == undefined
和sideBar != null
但是我有一个很好的方法可以在if:
中对这两个测试进行测试if (??)
答案 0 :(得分:16)
检查变量是否已定义且不为null的最佳实践:
if (typeof sideBar !== 'undefined' && sideBar !== null)
已编辑意识到您未检查某些内容是否未定义,您是否正在检查是否已定义,因此请再次进行修改以更准确地回答您的请求
答案 1 :(得分:7)
localStorage
使用字符串保存数据,即在null
与undefined
等进行推理时,您始终必须考虑JavaScript字符串逻辑。""
的字符串。
如果你在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
我不会对null
和undefined
使用尴尬的双重检查。
如果您直接检查localStorage.getItem
的结果,则结果为null
或String
。如果您还将空字符串""
视为“falsy”,
一个简单的if
语句很好:
var sideBar = localStorage.getItem('Sidebar');
if(sideBar) {
// do something with the sideBar
}
else {
// do something without the sideBar
}
要对localBarrage中未设置的sideBar进行实际检查,您需要添加对空String的检查并将其视为“已定义”:
if(sideBar || sideBar === "") {
// sideBar defined, maybe even as empty String
}
else {
// sideBar not set in localStorage
}
答案 2 :(得分:6)
正如W3 Manual明确解释: getItem(key)方法必须返回与给定键关联的当前值。 如果与对象关联的列表中不存在给定键,则此方法必须返回null。
这意味着,不需要检查undefined,如果未定义则getItem()方法的结果将为null。你需要检查null。
if (localStorage.getItem("Sidebar") !== null) {
//...
}
答案 3 :(得分:0)
是的,你用&&
因此,当且仅当每个条件的计算结果为真时,if (sideBar === undefined && sideBar !== null)
才会计算为真。
答案 4 :(得分:0)
如果可以使用&&
加入陈述建议使用'==='。例如if(sideBar === undefined&& sideBar!== null)
答案 5 :(得分:0)
这应该有用,并且除了“if”之外没有办法,即使它是三元运算符,
if( !value ) {
}
这将检查值是否为“truethy”并且应该涵盖“null”和“undefined”。