簡體   English   中英

如何在一個 IF 條件中使用多個 OR 和 & 子句?

[英]How to use multiple OR and & clause in one IF condition?

我正在嘗試使用 javascript 在 1 個 IF 條件中使用多個 OR 和 & 子句。

但我的代碼似乎不起作用。

這是我的代碼:

 localStorage.setItem('subbed', 'yes'); var isFree = '0'; if ((isFree == '0' && localStorage.getItem('subbed') == null) || (isFree == '0' && localStorage.getItem('strip_subbed') == null)) { console.log('locked'); } else { console.log('not locked'); }

如果你運行我的代碼,它總是alert('locked')這是錯誤的。 因為subbed localstorage是在其他所有內容之前設置的,而不是null

所以我基本上需要做的是查看IF localstorage subbed OR stripe_subbed is not null and isFree variable is not 0 ,然后解鎖某些東西(在這種情況下是警報('未鎖定'))。

我希望我有道理,有人可以幫助我。

這也是一個工作小提琴: https://jsfiddle.net/13Lbdmqr/

你用英語比用代碼更好地表達了你的病情...... ;-)

if ((localStorage.getItem('subbed') !== null || localStorage.getItem('strip_subbed') !== null) && isFree !== '0') alert('not locked');
else alert('locked');

而已!

首先,您需要將第一行從

localStorage.getItem("subbed", "yes")

localStorage.setItem("subbed", "yes");

接下來我們需要檢查您的情況

如果 localStorage 項目subbed OR strip_subbednull你會locked

像這樣的東西更多是你想要的:

if(isFree === '0' && (localStorage.getItem("subbed") === null && localStorage.getItem("strip_subbed") === null)) {
    alert("locked")
}

我發現對於像這樣的復合事物,將您的條件移動到具有好名稱的變量中以使其易於推理可能會很好。

var isSubbed = localStorage.getItem("subbed") !== null;
var isStripSubbed = localStorage.getItem("strip_subbed") !== null;

if(isFree !== '0' && (isSubbed || isStripSubbed)){
    alert("not locked");
} else {
    alert("locked");
}

您有兩個主要選擇

  1. (localStorage.getItem('subbed').== null || localStorage.getItem('subbed') !== null) && isFree !== '0'
  2. .(localStorage.getItem('subbed') === null && localStorage.getItem('subbed') === null) && isFree !== '0'

要了解當前發生的情況,讓我們將現有表達式分解為多個步驟。 我們從:

(isFree == '0' && localStorage.getItem('subbed') == null) || 
(isFree == '0' && localStorage.getItem('strip_subbed') == null)

在我們檢查isFree == '0'之后:

(true && localStorage.getItem('subbed') == null) ||
(true && localStorage.getItem('strip_subbed') == null)

在我們檢查了localStorage.getItem(x) == null的兩種情況之后:

(true && false) ||
(true && true)

最后:

false || true

...這導致true 就像你說的,這不是你想要的


為了修正我們的理解,我們需要仔細看看你所說的:

localstorage subbed OR stripe_subbed 不是 null 並且 isFree 變量不是 0

...“不為空”實際上是指這句話中的兩個可能的東西 - subbed 或 stripe_subbed。 因此,這將與您所說的不同:

(localStorage.getItem('subbed') !== null || localStorage.getItem('subbed') !== null) && isFree !== '0'

(我答案頂部的第二個選項來自將德摩根定律應用於代碼)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM