21

我有这个代码:

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

我想检查是否在 if 语句中定义了 sideBar 并且不为空。我有点困惑我知道有一个:sideBar == undefinedsideBar != null

但是我有没有一种好方法可以在 if 中对这两个测试进行测试:

if (??) 
4

7 回答 7

25

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

if (typeof sideBar !== 'undefined' && sideBar !== null)

编辑意识到您不是在检查是否未定义,而是在检查它是否已定义,因此再次编辑以更准确地回答您的请求

于 2012-11-15T06:03:37.783 回答
9

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

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

if (localStorage.getItem("Sidebar") !== null) {
//...
}
于 2014-08-04T10:17:36.920 回答
8
  1. localStoragenull使用 Strings 来保存数据,即,在推理vs.undefined等时,您总是必须考虑 JavaScript 字符串逻辑。
  2. 如果您设置“sideBar”,请确保您不使用“虚假”值。对于 Strings 那只是空的 String ""。如果您在检查变量之前做了其他事情(例如,一些数学)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

我不会对nulland使用尴尬的双重检查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
}
于 2012-11-15T06:30:56.993 回答
1

是的,您将两者结合在一起(意味着两者都必须为真)&&

所以......if (sideBar === undefined && sideBar !== null)当且仅当每个条件评估为真时才会评估为真。

于 2012-11-15T05:58:06.137 回答
1

这应该可行,并且没有“如果”之外的方法,即使它是三元运算符,

if( !value ) {
}

这将检查值是否为“truethy”,并应涵盖“null”和“undefined”。

于 2012-11-15T06:02:11.703 回答
0

如果语句可以使用 && 连接

建议使用'==='。例如 if (sideBar === undefined && sideBar !== null)

http://www.w3schools.com/jsref/jsref_undefined.asp

于 2012-11-15T05:59:04.073 回答
0

只需要使用 ES2020 nullish coalescing operator 的简单方式

空值合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为空或未定义时返回其右侧操作数,否则返回其左侧操作数。

解决方案


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/JavaScript/Reference/Operators/Nullish_coalescing_operator

https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem

于 2022-01-01T10:23:30.523 回答