Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的链接操作符是如何工作的?_Javascript - Fatal编程技术网

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的预期结果,但不是您所说的您想要的结果。但你不能一概而论…:-