Javascript 三元运算符和&&运算符之间的确切区别是什么?

Javascript 三元运算符和&&运算符之间的确切区别是什么?,javascript,Javascript,我只是在玩一个代码,在将三元运算符转换为&&和| |运算符时,我发现代码中有一点神秘的行为: 设a=3; a=a>1和&2|a; console.loga; 设b=3; b=b>1?2:b; console.logb; //a和b都是一样的。很好。 const getAdjacentHighestProduct=arr=>{ 设max=-无穷大; arr.reducea,c=>{ 设乘积=a*c; 最大值=产品>最大值?产品:最大值; 返回a=c; }; 返回最大值; }; constapro

我只是在玩一个代码,在将三元运算符转换为&&和| |运算符时,我发现代码中有一点神秘的行为:

设a=3; a=a>1和&2|a; console.loga; 设b=3; b=b>1?2:b; console.logb; //a和b都是一样的。很好。 const getAdjacentHighestProduct=arr=>{ 设max=-无穷大; arr.reducea,c=>{ 设乘积=a*c; 最大值=产品>最大值?产品:最大值; 返回a=c; }; 返回最大值; }; constaproduct=getAdjacentHighestProduct[1,0,1,0,1000]; console.logaProduct; const getAdjacentHighestProduct2=arr=>{ 设max=-无穷大; arr.reducea,c=>{ 设乘积=a*c; 最大值=产品>最大值&产品| |最大值; 返回a=c; }; 返回最大值; }; const aProduct2=getAdjanceThighestProduct2[1,0,1,0,1000]; console.logaProduct2;
//A产品和A产品2不一样。这不好。区别在于:他们做不同的事情

三元运算符 逻辑与 逻辑或 如果b是假的,对吗?b:c将是b,而true&b|c将是c

功能三元组a、b、c{ 返回a?b:c; } 功能A、b、c{ 返回a&b|c; }
控制台.日志1,0,3和1,0,3 谢谢大家!我得到了答案。让我们在这里打破它们:

我希望,你明白,不要想解释

0 > -Infinity && 0 || -Infinity
false > -Infinity && false || -Infinity
false > -Infinity
空值是我好奇的关键点。啊,我刚刚找到了:

变量a={b:无穷大,c:10};
console.logJSON.stringifya;它们完全不同?@Pointy但确切的区别是什么?你检查过互联网上无数JavaScript引用中的一个吗?如果你愿意,你可以阅读完整的规范。也许你可以创建一个更基本的例子?我认为你被否决了,因为你的问题似乎有点奇怪,因为乍一看,他们似乎是苹果和桔子。或者这更像是一个XY问题。你到底想做什么?什么不起作用?我在浏览器和节点中都没有看到任何空值:/我知道,但在我的特定示例中,为什么结果不同?因为你更改了运算符?你甚至打算对这一行做什么??你知道你在混合布尔值和整数值吗?a=a>1和&2|a;JavaScript存在短路。在尝试变得聪明之前,请先查一下。js中也没有整数。@Jonaswillms我会等待你的答案,真的。等等,你也是在讽刺吗?@Jonaswillms如果不是讽刺,那么你确定它是空的而不是NaN吗?它是空的,这让我很惊讶地发布了这个问题。我看不出它怎么可能是空的。你能举一个复制这个的例子吗?因为在reduce中省略了初始值,所以它将被设为product=undefined*1,即NaN,但不为null@ıı如果省略了要reduce的第二个参数,则第一次迭代将针对数组中的第二个值,并且reduce累加器将作为数组中的第一个值开始。因此,第一次迭代将a设为1,b设为0。您的问题没有提到JSON,尽管@ııı是的,我不确定他们在测试用例中使用了什么。我刚刚在帖子中插入了一个截图。啊,这就是为什么我找不到空的…:
x = a && b
x = a || b
0 > -Infinity && 0 || -Infinity
false > -Infinity && false || -Infinity
false > -Infinity