这个 JavaScript 中的布尔返回值是如何工作的?



我对编程很陌生,一直在努力自学。我在网上遇到了以下问题并试图解决它,但陷入了死胡同:

"编写一个接受三个参数的函数,如果其中只有一个参数是真实的,则返回 true,如果不是,则返回 false。不要使用 && 或 ||运算符或 if 语句。

在过去的两天里,这让我感到困惑,所以我继续使用解决方案,我很难弄清楚:

function onlyOne(x, y, z) {
return (!!x + !!y + !!z === 1);
}

我理解语法,但我不明白逻辑或为什么有效。有人能帮我吗?我想了解为什么代码有效,而不仅仅是记住语法。

!!

将值转换为实际布尔值。当你对布尔值执行加法时,JavaScript 会将它们强制为数字,false0true1

基本上,(!!x + !!y + !!z === 1)xyz转换为truefalse,然后将它们全部加在一起。如果其中只有 1 个为真,则值将为1=== 1为真,否则为假。

下面是一个示例,显示了布尔值加法的工作原理:

console.log(false + false); // 0
console.log(false + true);  // 1
console.log(true + true);   // 2

!!

将您的变量"强制转换"到布尔值中,该布尔值在通过+运算符转换回数字时只能具有01的值。如果你考虑一下,如果只有一个变量为真,你只能在将它们加在一起后得到1

最新更新