我对编程很陌生,一直在努力自学。我在网上遇到了以下问题并试图解决它,但陷入了死胡同:
"编写一个接受三个参数的函数,如果其中只有一个参数是真实的,则返回 true,如果不是,则返回 false。不要使用 && 或 ||运算符或 if 语句。
在过去的两天里,这让我感到困惑,所以我继续使用解决方案,我很难弄清楚:
function onlyOne(x, y, z) {
return (!!x + !!y + !!z === 1);
}
我理解语法,但我不明白逻辑或为什么有效。有人能帮我吗?我想了解为什么代码有效,而不仅仅是记住语法。
!!
将值转换为实际布尔值。当你对布尔值执行加法时,JavaScript 会将它们强制为数字,false
0
,true
被1
。
基本上,(!!x + !!y + !!z === 1)
将x
、y
和z
转换为true
或false
,然后将它们全部加在一起。如果其中只有 1 个为真,则值将为1
,=== 1
为真,否则为假。
下面是一个示例,显示了布尔值加法的工作原理:
console.log(false + false); // 0
console.log(false + true); // 1
console.log(true + true); // 2
!!
将您的变量"强制转换"到布尔值中,该布尔值在通过+
运算符转换回数字时只能具有0
或1
的值。如果你考虑一下,如果只有一个变量为真,你只能在将它们加在一起后得到1
。