[英]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_subbed
是null
你會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");
}
您有兩個主要選擇:
(localStorage.getItem('subbed').== null || localStorage.getItem('subbed') !== null) && isFree !== '0'
.(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.