Javascript逻辑运算符和赋值?

Javascript逻辑运算符和赋值?,javascript,jquery,logic,Javascript,Jquery,Logic,显然,上述代码中的x没有返回布尔值。它返回第一个有效值,第一种情况下为1,第二种情况下为2 还有什么像这样的奇怪之处我需要注意吗?Javascript中的|操作符,如x | | y将计算第一个操作数(如果它是truthy)或第二个操作数(如果第一个操作数不是truthy)。是的 描述了Javascript中的truthy。基本上,除了一个错误的值之外,它是: x = 1 || 2; alert(x); x = undefined || 2; alert(x); 因此,您必须将|操作符视为处理t

显然,上述代码中的
x
没有返回布尔值。它返回第一个有效值,第一种情况下为1,第二种情况下为2


还有什么像这样的奇怪之处我需要注意吗?

Javascript中的
|
操作符,如
x | | y
将计算第一个操作数(如果它是truthy)或第二个操作数(如果第一个操作数不是truthy)。是的

描述了Javascript中的
truthy
。基本上,除了一个
错误的
值之外,它是:

x = 1 || 2;
alert(x);
x = undefined || 2;
alert(x);
因此,您必须将
|
操作符视为处理truthy/falsey而不是纯布尔值的东西

操作符按照指定的方式工作,成千上万的开发人员通过这种方式学习并成功使用它。它不是一个纯布尔运算符。它不一定返回布尔值。这与其他一些语言不同。如果你想称不同的为“奇怪”,欢迎你发表意见。但是,它就是这样,而且在Javascript中一直是这样

很容易了解它的功能并使用它。一旦您理解了设计意图,它的规范或实现就没有什么奇怪或不可预测的地方


这与来自其他语言的人可能期望的不同,但这并不是任何语言的目标。每种语言都有自己的设计,必须学会如何恰当地使用它。

这个问题太广泛了,因为JavaScript由于其类型系统和其他设计原则,充满了有趣的行为。例如,尝试添加字符串var
a=“1”
var b=“2”
中包含的两个整数<代码>变量c=a+b
将是
“12”
,而不是
3
,当您将js表达式放入if(表达式)时,它的计算方式为if!!双倍不。if/while中的所有值都将给出布尔值,比如if(1 | | 2)>true,x=1 | | 2将存储x=1,逻辑OR运算符的行为不是“奇怪”,而是……javascript中的所有变量都是“truthy”或“falsy”,而不管它们是实际的布尔值。“奇怪”的定义是“主要基于观点”。好的,那么&&它的计算结果是两个真实值的结合吗?i、 解释了e.[1,2,3]和[2,3]=[2,3]?@veta-
&
。引用:如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,如果两个操作数都为true,&&将返回true;否则,返回false。
false
null
undefined
0
NaN
""