【问题标题】:how to use OR operator in nodejs如何在nodejs中使用OR运算符
【发布时间】:2019-03-22 14:01:20
【问题描述】:

我正在尝试添加一个 if 条件;想法是如果我将输入作为打印或文本输入,其中包含 4,则应调用 else 块。

if ((turnContext.activity.text.indexOf('print') == -1) || (turnContext.activity.text.indexOf('4') == -1))

现在,它进入 if 块而不是 else。

【问题讨论】:

  • OR 运算符将“短路”,这意味着如果第一个条件为真,则不执行剩余的比较:Short-circuiting

标签: node.js or-operator


【解决方案1】:

您必须使用:&&。否则当文本为print时,文本不是4进入if块。

if ((turnContext.activity.text.indexOf('print') == -1) 
   && (turnContext.activity.text.indexOf('4') == -1)) {
   // not 4 nor print
} else {
   // print or 4
}

【讨论】:

  • 使用 === 而不是 == 只是为了增强
  • 增强什么?在这种情况下使用 ===== 将永远不会产生意外的输出。 .indexOf 总是返回一个整数,我正在与 -1 进行比较,只是想留下 OP 代码,只需要修复。
  • @ViswanathLekshmanan 老实说,没有必要 === 因为 indexOf() 总是返回与 -1 比较的整数,就像 Marcos 所说的那样。如果我们不确定函数的返回值,也需要类型比较,但即使我更喜欢 === 比较也没有什么坏处。
  • 我确实更喜欢在我的代码中使用它,但由于我的个人偏好,我不会更正一些没有错的地方:)
【解决方案2】:

如果 text 为 'print' 或字符串中包含 4,则执行进入 else 块。

if (turnContext.activity.text !== 'print' && turnContext.activity.text.indexOf('4') === -1) {

}

【讨论】:

  • 我认为这不是 OP 所要求的。如果turnContext.activity.text 既不打印也不包含4,他们似乎希望执行if
  • @EvanBechtol 谢谢我误解了,我已经做出了改变。
  • 如果我使用这个 if ((turnContext.activity.text.indexOf('print') !== -1) || (turnContext.activity.text.indexOf('4') == = -1)) ;带 4 的字符串转到 else 但 print 转到 if ,这是有道理的。两者都设置=== -1。两者都去 if 块
  • @sunrise830 将其更改为 if ((turnContext.activity.text.indexOf('print') === -1) && (turnContext.activity.text.indexOf('4') === -1)) 这意味着如果输入具有 print 或 4,则其中 1 的索引更改为值 > -1 ,这意味着其中一个的相等条件失败导致else 条件被调用,因为 True 和 False 总是 False
猜你喜欢
  • 2018-11-11
  • 2023-03-15
  • 2022-01-02
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2018-12-14
  • 2014-10-15
相关资源
最近更新 更多