我有这个代码:
var sideBar = localStorage.getItem('Sidebar');
我想检查是否在 if 语句中定义了 sideBar 并且不为空。我有点困惑我知道有一个:sideBar == undefined
和sideBar != null
但是我有没有一种好方法可以在 if 中对这两个测试进行测试:
if (??)
我有这个代码:
var sideBar = localStorage.getItem('Sidebar');
我想检查是否在 if 语句中定义了 sideBar 并且不为空。我有点困惑我知道有一个:sideBar == undefined
和sideBar != null
但是我有没有一种好方法可以在 if 中对这两个测试进行测试:
if (??)
检查变量是否已定义且不为空的最佳实践:
if (typeof sideBar !== 'undefined' && sideBar !== null)
编辑意识到您不是在检查是否未定义,而是在检查它是否已定义,因此再次编辑以更准确地回答您的请求
正如W3 手册明确解释的那样:getItem(key)方法必须返回与给定键关联的当前值。如果与对象关联的列表中不存在给定键,则此方法必须返回 null。
这意味着,无需检查未定义,如果未定义,则 getItem() 方法的结果将为空。你只需要检查null。
if (localStorage.getItem("Sidebar") !== null) {
//...
}
localStorage
null
使用 Strings 来保存数据,即,在推理vs.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
and使用尴尬的双重检查undefined
。如果你直接检查结果localStorage.getItem
的结果是要么null
要么String
。如果您随后还将空字符串""
视为“虚假”,则可以使用简单的if
语句:
var sideBar = localStorage.getItem('Sidebar');
if(sideBar) {
// do something with the sideBar
}
else {
// do something without the sideBar
}
要对从未在 localStorage 中设置的 sideBar 进行真正的检查,您需要添加对空字符串的检查并将其视为“已定义”:
if(sideBar || sideBar === "") {
// sideBar defined, maybe even as empty String
}
else {
// sideBar not set in localStorage
}
是的,您将两者结合在一起(意味着两者都必须为真)&&
所以......if (sideBar === undefined && sideBar !== null)
当且仅当每个条件评估为真时才会评估为真。
这应该可行,并且没有“如果”之外的方法,即使它是三元运算符,
if( !value ) {
}
这将检查值是否为“truethy”,并应涵盖“null”和“undefined”。
如果语句可以使用 && 连接
建议使用'==='。例如 if (sideBar === undefined && sideBar !== null)
空值合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为空或未定义时返回其右侧操作数,否则返回其左侧操作数。
const sideBar = localStorage.getItem('Sidebar') ?? false;
if(sideBar) {
// true
} else {
// false
}
undefined
在使用该localStorage.getItem
方法时进行检查。Storage 接口的 getItem() 方法在传递一个键名时,将在给定的 Storage 对象中返回该键的值,如果该键不存在,则返回 null。
https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem