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

时间:2019-10-01 20:37:04

标签: javascript

我正在尝试使用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/

3 个答案:

答案 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项subbedstrip_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");
}

答案 2 :(得分:0)

您有两个主要选择

  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或stripe_subbed不为null,且isFree变量不为0

...“不为空”实际上是指这句话中的两种可能的情况-subbed或stripe_subbed。因此,它的编码方式可能与您所说的不同:

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

(答案的第二个选项是将De Morgan's laws应用于代码)