此JavaScript中的布尔返回值如何工作?

时间:2017-09-28 00:11:03

标签: javascript

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

  

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

过去两天这让我很难过,所以我转向解决方案,我很难搞清楚:

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

我理解语法,但我不理解逻辑或为什么这样做。有人能帮助我吗?我想了解代码的工作原理,而不只是记住语法。

2 个答案:

答案 0 :(得分:4)

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

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

这是一个示例,说明如何添加布尔值:



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




答案 1 :(得分:1)

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