<分区>
我编写了以下 Javascript 函数,当恰好有一个参数为真时返回 true
:
function onlyOne( a, b, c) {
return (a && !b && !c) ||
(b && !a && !c) ||
(c && !a && !b);
}
它按预期工作,除了在一些情况下返回 0
:
EXPECT true:
true = onlyOne( 1, 0, 0)
true = onlyOne( 0, 1, 0)
true = onlyOne( 0, 0, 1)
EXPECT false:
0 = onlyOne( 0, 0, 0)
false = onlyOne( 0, 1, 1)
false = onlyOne( 1, 0, 1)
0 = onlyOne( 1, 1, 0)
false = onlyOne( 1, 1, 1)
为什么在上述两种情况下它返回 0
而不是 false?我看到这是仅有的两种 c
为 0 的负面情况,但我看不出这有何不同。显然,我在这里不了解有关 Javascript 逻辑运算符和/或类型转换的某些内容。
这是生成上述输出的完整代码。我正在使用 node.js 4.3.0 从 Windows 命令行运行它,如果有任何不同的话:
function testOnlyOne( a, b, c) {
result = onlyOne(a, b, c);
console.log("%j = onlyOne( %j, %j, %j)", result, a, b, c);
}
function onlyOne( a, b, c) {
return (a && !b && !c) ||
(b && !a && !c) ||
(c && !a && !b);
}
console.log("\nEXPECT true:");
testOnlyOne( 1, 0, 0);
testOnlyOne( 0, 1, 0);
testOnlyOne( 0, 0, 1);
console.log("\nEXPECT false:");
testOnlyOne( 0, 0, 0);
testOnlyOne( 0, 1, 1);
testOnlyOne( 1, 0, 1);
testOnlyOne( 1, 1, 0);
testOnlyOne( 1, 1, 1);