下面寫一個用于判斷只有一個為真的函數:
function onlyOne(a,b,c){return !!((a && !b && !c) ||(!a && b && !c) || (!a && !b && c));
}
var a = true;
var b = false;onlyOne(a,b,b) // true
onlyOne(a,b,a); // false
上述函數的缺點:
1.邏輯混亂,
2.不易拓展…(如果要求100個boolean里面…你慢慢寫去吧)
好在,可以使用強制類型轉換:
- 使用!!將各種類型轉換為布爾值
- 使用Number將布爾值顯示轉換為0或1
- 對所有顯示轉換成的數字求和,為1返回true,否則返回false
funciton onlyOne(){var sum = 0;for( var i = 0; i< arguments.length; i++) {sum += Number(!!argumen[i]);}return sum === 1;
}
參考《你不知道的JavaScript》(中卷)P71~P72