21

私はこのコードを持っています:

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

if ステートメントで sideBar が定義されていて null でないかどうかを確認したい。私は少し混乱しています:sideBar == undefinedsideBar != null

しかし、if内でこれらの両方に対してこのテストを行う良い方法はありますか:

if (??) 
4

7 に答える 7

25

変数が定義されており、null でないかどうかを確認するためのベスト プラクティス:

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

何かが定義されていないかどうかを確認していないことに気づき、それが定義されていることを確認しているので、リクエストに正確に答えるために再度編集しまし

于 2012-11-15T06:03:37.783 に答える
9

W3 マニュアルで明示的に説明されているように、 getItem(key)メソッドは、指定されたキーに関連付けられた現在の値を返す必要があります。指定されたキーがオブジェクトに関連付けられたリストに存在しない場合、このメソッドは null を返す必要があります。

つまり、未定義をチェックする必要はありません。未定義の場合、getItem() メソッドの結果は null になります。null に対してチェックするだけです。

if (localStorage.getItem("Sidebar") !== null) {
//...
}
于 2014-08-04T10:17:36.920 に答える
8
  1. localStoragenullは文字列を使用してデータを保存します。つまり、 vs.undefinedなどを推論するときは、常に JavaScript の文字列ロジックを考慮する必要があります。
  2. 「sideBar」を設定する場合は、「偽の」値を使用しないようにしてください。空の 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

nullと の厄介な二重チェックは使用しませんundefined。結果の結果を直接確認した場合localStorage.getItem、結果は または のいずれnullStringです。次に、空の文字列""も「偽」と見なす場合は、単純なifステートメントで問題ありません。

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

if(sideBar) {
   // do something with the sideBar
}
else {
   // do something without the sideBar
}

sideBar が localStorage に設定されていないことを実際にチェックするには、空の文字列のチェックを追加し、それを「定義済み」として扱う必要があります。

if(sideBar || sideBar === "") {
    // sideBar defined, maybe even as empty String
}
else {
    // sideBar not set in localStorage
}
于 2012-11-15T06:30:56.993 に答える
1

これは機能するはずです。三項演算子であっても、「if」の外に道はありません。

if( !value ) {
}

これは、値が「truethy」であるかどうかをチェックし、「null」と「undefined」の両方をカバーする必要があります。

于 2012-11-15T06:02:11.703 に答える
1

はい、あなたは2つを連言的にバインドします(両方が真でなければならないことを意味します)&&

したがってif (sideBar === undefined && sideBar !== null)、各条件が true と評価された場合にのみ true と評価されます。

于 2012-11-15T05:58:06.137 に答える
0

&& を使用してステートメントを結合できる場合

「===」を使用することをお勧めします。例えば ​​if (sideBar === undefined && sideBar !== null)

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

于 2012-11-15T05:59:04.073 に答える
0

ES2020 nullish 合体演算子の簡単な方法を使用する必要があるだけです

Null 合体演算子 (??) は、左側のオペランドが 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/JavaScript/Reference/Operators/Nullish_coalescing_operator

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

于 2022-01-01T10:23:30.523 に答える