为什么我的病情总是如此

问题描述 投票:1回答:7

我想在这个例子中知道为什么我的病情总是如此?谢谢

function bla() {
  var qix = 'z'
  if (qix === 'a' || 'b' || 'c') {
     console.log('condition ok!! whats wrong???')
  }
}
javascript lodash
7个回答
2
投票

我想你错过了两个概念。

首先是如何||运算符工作和第二次强制javascript值。

在你的代码中:

  if ('z' === 'a' || 'b' || 'c') { ----}

将始终评估为true。原因是||运算符将返回第一个强制为true的值而不实际强制该值。关联性(执行者执行的顺序)是从左到右。这意味着发生以下情况:

首先评估以下内容,因为它有更高的precedence

'z' === 'a' // false

然后我们有以下表达式,将从左到右进行评估:

false || 'b' || 'c'

let foo = false || 'b'

console.log(foo)

然后我们有以下表达式:

let foo = 'b' || 'c'

console.log(foo)

所以整个表达式演变为字符串'b'

在if语句中的表达式被计算为值'b'之后,这又被强制转换为布尔值。每个字符串都转换为true,这就是值始终为真的原因。


1
投票

这是因为你'如果条件'是3可能的选择

首先说qix ==='a',这是假的,但你问的是'b','c'和这个选项是值true,因为你不是将var qix与'b'或'c'进行比较,你只要求IF条件,如果'b'或'c'是值

运营商||它被使用了

if(First Condition || Second Condition || third condition){
 if at least one of these options is true, then enter here
}

在ECMAScript 2016中,为数组提供了一个includes()方法,专门解决了这个问题

if (['b', 'c', 'a'].includes(qix)) {
    this is false
}

if (['z', 'c', 'a'].includes(qix)) {
    this is true
}

或者你可以写

function bla() {
  var qix = 'z'
  if (qix === 'a' || qix === 'b' || qix === 'c') {
     console.log('condition ok!! whats wrong???')
  }
}

1
投票

我们知道||OR逻辑运算符)如果任一操作数为真,则返回true。在你的if条件中,qix === 'a' || 'b' || 'c'在它们的第二个和第三个操作数中是字符串而字符串被认为是false当且仅当它们为空时否则为真。因此,您的情况始终如此。

需要检查qix如qix ==='b'

 var qix = 'z'
  if (qix === 'a' || qix === 'b' || qix ==='c') {
     console.log('condition ok!! whats wrong???')
  }
  else{
      console.log('else')
  }

0
投票

你可以使用正则表达式:qix.match(/^(a|b|c)$/) 如果qix等于abc,应返回

var qix = 'z';
if (qix.match(/^(a|b|c)$/)) {
   console.log('condition ok!! whats wrong???');
} else {
   console.log('else');
}

0
投票

JavaScript为第二个或表达式返回true,因为'b'始终为true。

您需要针对qix检查每个值,如下所示:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators

  var qix = 'z'
  if (qix === 'a' || qix === 'b' ||  qix === 'c') {
     console.log('condition ok!! whats wrong???')
  }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.