javascript中的链接操作符是如何工作的?
我想对三个布尔变量进行异或运算。只有一个是真的,而且必须是真的:javascript中的链接操作符是如何工作的?,javascript,Javascript,我想对三个布尔变量进行异或运算。只有一个是真的,而且必须是真的: function isValid(a, b, c) { return a !== b !== c; } var one = false; var two = false; var three = true; console.log(isValid(one, two, three)); // should be true one = true; console.log(isValid(one, two, three));
function isValid(a, b, c) { return a !== b !== c; }
var one = false;
var two = false;
var three = true;
console.log(isValid(one, two, three)); // should be true
one = true;
console.log(isValid(one, two, three)); // should be false
这个解决方案似乎有效,但我的问题是。。。为什么?如果所有值都为false,那么它不应该失败吗
var one = false;
var two = false;
var three = false;
console.log(isValid(one, two, three)); // should be true, but it is false
此外,如果所有变量都为true,则在应返回false时返回true
var one = true;
var two = true;
var three = true;
console.log(isValid(one, two, three)); // should be false, but it's true
我的想法是,它执行如此:
a !== b? TRUE
TRUE !== c? TRUE
显然,它不是这样工作的,那么它是如何工作的呢?因为操作符具有相同的优先级,所以关联性决定了如何计算它 你可以一步一步地理解它
a !== b -> this return `false` as false !== false
所以现在情况是
false !== c -> this return `true` as false !== true
因为操作符具有相同的优先级,所以关联性决定了如何计算它 你可以一步一步地理解它
a !== b -> this return `false` as false !== false
所以现在情况是
false !== c -> this return `true` as false !== true
这个解决方案似乎有效,但我的问题是。。。为什么?
它不适用于你所描述的只有一个是真实的,一个必须是真实的;在真的,真的,真的情况下它失败了:
函数isValida,b,c{返回a!==b!==c;}
console.logisValidtrue,true,true;//真的,应该是假的
这个解决方案似乎有效,但我的问题是。。。为什么?
它不适用于你所描述的只有一个是真实的,一个必须是真实的;在真的,真的,真的情况下它失败了:
函数isValida,b,c{返回a!==b!==c;}
console.logisValidtrue,true,true;//是的,应该是假的JavaScript不像Python。a!==b!==c表示a!==b!==c、 还有一个!==b产生一个布尔值,该值与c相比较。如果它们都为真,它也输出真a!==b这是false,因为两个元素的值都是false。那你就错了!==c、 这也是假的,因为c的值为false。因此,你的解决方案并没有达到你认为的效果。同样,如果所有的都是真的,那么你就得到了真的!==对,这是错的。然后是假的!==是的,这是真的。底线是:你想要一个!==b&a!==c&b!==cJavaScript不像Python。a!==b!==c表示a!==b!==c、 还有一个!==b产生一个布尔值,该值与c相比较。如果它们都为真,它也输出真a!==b这是false,因为两个元素的值都是false。那你就错了!==c、 这也是假的,因为c的值为false。因此,你的解决方案并没有达到你认为的效果。同样,如果所有的都是真的,那么你就得到了真的!==对,这是错的。然后是假的!==是的,这是真的。底线是:你想要一个!==b&a!==c&b!==汉克斯。我很快发现一切都是真的,这让我犯了错误。我想出了一个解决办法,但我觉得有一个更好的办法:@Jeff-事实上……现在我想,真异或真异或真应该是真的,因为真异或真是假,假异或真是真。恰好对于这个特定的操作,a!==b!==c生成XOR的预期结果,但不是您所说的您想要的结果。但你不能一概而论…:-谢谢我很快发现一切都是真的,这让我犯了错误。我想出了一个解决办法,但我觉得有一个更好的办法:@Jeff-事实上……现在我想,真异或真异或真应该是真的,因为真异或真是假,假异或真是真。恰好对于这个特定的操作,a!==b!==c生成XOR的预期结果,但不是您所说的您想要的结果。但你不能一概而论…:-