如果只有一个条件为 true,是否有返回 true 的逻辑运算符?

Is there a logical operator that returns true if only one of the conditions are true?

提问人:Elías Ferreira Tabó 提问时间:2/16/2021 更新时间:2/16/2021 访问量:1256

问:

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

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

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

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

javascript 布尔逻辑

评论

1赞 Sebastian Simon 2/16/2021
你的意思是“如果恰好其中一个条件成立,则返回”?你可以用 做类似的事情。"ERROR"[Number.isNaN(num1), Number.isNaN(num2), num1 < 0, num2 < 0].filter(Boolean).length === 1

答:

1赞 Daniel A. White 2/16/2021 #1

如果其中任何一个是真实的,则逻辑 OR 将返回 truthy。如果一切都是真实的,则逻辑 AND 将返回 truthy。如果你只想要一个,则没有逻辑异或,而是按位异或。^

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

评论

0赞 Elías Ferreira Tabó 2/16/2021
问题是,当我执行这些时:' console.log (sumAll(10, “90”));console.log (sumAll(10, [90, 1]));' 他们不会返回 ERROR,但会转到下一个 if。这些输入不被视为 NaN 吗?
1赞 Daniel A. White 2/16/2021
@ElíasFerreiraTabó请用一个最小的可重复的例子来编辑你的问题
1赞 Daniel A. White 2/16/2021
@ElíasFerreiraTabó您需要检查其类型的值返回 false - addNumber.isNaN([10])typeof num1 !== 'number'