【问题标题】:Is there a logical operator that returns true if only one of the conditions are true?如果只有一个条件为真,是否有一个逻辑运算符返回真?
【发布时间】:2021-02-16 04:27:41
【问题描述】:

我正在尝试编写一个函数,如果一个或两个参数不是数字或小于 0,则返回“ERROR”。

if (Number.isNaN(num1) || Number.isNaN(num2) || num1 < 0 || num2 < 0)
{
    return "ERROR";
}

只有当它们都为真时,逻辑或才会返回真,对吧?逻辑与也会做同样的事情。另外,我不能使用 Not 运算符,因为这会干扰函数中的其余 else if。

很抱歉,如果有人问过这个问题,但我找不到。

【问题讨论】:

  • 您的意思是“如果恰好有一个条件成立,则返回"ERROR"”?你可以用[Number.isNaN(num1), Number.isNaN(num2), num1 &lt; 0, num2 &lt; 0].filter(Boolean).length === 1做类似的事情。

标签: javascript boolean-logic


【解决方案1】:

如果其中任何一个为真,逻辑 OR 将返回真。如果所有内容都是真实的,逻辑 AND 将返回真实。如果您只想要一个,则没有逻辑异或,而是与^ 进行逐位异或。

但我认为在您的情况下,逻辑 OR 是完全可以接受的,因为您正在验证输入。

【讨论】:

  • 问题是当我执行这些时:`console.log (sumAll(10, "90")); console.log (sumAll(10, [90, 1])); ` 他们不会返回 ERROR,但会转到下一个 if。这些输入不被视为 NaN 吗?
  • @ElíasFerreiraTabó 请使用minimal reproducible example编辑您的问题
  • @ElíasFerreiraTabó 您需要检查其类型的值 Number.isNaN([10]) 返回 false - 添加 typeof num1 !== 'number'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多