我正在尝试使用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
,然后解锁一些东西(在这种情况下为alert(“未锁定”))。
我希望我有道理,有人可以帮助我。
这也是一个有用的小提琴:https://jsfiddle.net/13Lbdmqr/
答案 0 :(得分:2)
您用英语表达的条件比用代码表达的要好...;-)
if ((localStorage.getItem('subbed') != null || localStorage.getItem('strip_subbed') != null) && isFree != '0') alert('locked');
else alert('not locked');
就是这样!
答案 1 :(得分:1)
首先,您需要从
更改第一行localStorage.getItem("subbed", "yes")
到
localStorage.setItem("subbed", "yes");
接下来我们需要检查您的状况
如果localStorage项subbed
或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");
}
答案 2 :(得分:0)
您有两个主要选择:
(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或stripe_subbed不为null,且isFree变量不为0
...“不为空”实际上是指这句话中的两种可能的情况-subbed或stripe_subbed。因此,它的编码方式可能与您所说的不同:
(localStorage.getItem('subbed') !== null || localStorage.getItem('subbed') !== null) && isFree !== '0'
(答案的第二个选项是将De Morgan's laws应用于代码)