我对编程很陌生,并且一直在努力自学。我在网上遇到了以下问题,并试图解决它,但遇到了死胡同:
“编写一个接受三个参数的函数,如果只有其中一个参数是真值则返回true,否则返回false。不要使用&&或||运算符或if语句。”
过去两天这让我很难过,所以我转向解决方案,我很难搞清楚:
function onlyOne(x, y, z) {
return (!!x + !!y + !!z === 1);
}
我理解语法,但我不理解逻辑或为什么这样做。有人能帮助我吗?我想了解代码的工作原理,而不只是记住语法。
答案 0 :(得分:4)
!!
将值转换为实际的布尔值。当您对布尔值执行添加时,JavaScript会将它们强制转换为数字,false
为0
且true
为1
。
基本上,(!!x + !!y + !!z === 1)
将x
,y
和z
投射到true
或false
,然后将它们全部加在一起。如果其中只有一个是真实的,则值为1
,=== 1
为真,否则为假。
这是一个示例,说明如何添加布尔值:
console.log(false + false); // 0
console.log(false + true); // 1
console.log(true + true); // 2

答案 1 :(得分:1)
!!
将您的变量“强制转换”为布尔值,当通过0
运算符转换回数字时,该布尔值只能包含值1
或+
。如果你考虑一下,如果只有一个变量为真,你只能在将它们加在一起后得到1
。