images
上面代码中显然x = 1 || 2;
alert(x);
x = undefined || 2;
alert(x);
没有返回布尔值。它返回第一个有效值,在第一种情况下为1,在第二种情况下为2。
还有其他任何我应该注意的陌生感吗?
答案 0 :(得分:2)
||
中的x || y
运算符将在第一个操作数中计算,如果它是真实的,则第二个操作数是第一个操作数,如果第一个操作数不是真的。它是documented on MDN here。
truthy
被描述为here on MDN。它基本上是除falsey
值之一以外的任何值:
false
null
undefined
0
NaN
""
所以,你必须将||
运算符视为真实的,而不是纯粹的布尔运算符。
操作员按照指定的方式工作,成千上万的开发人员以这种方式学习并成功使用它。它不是纯布尔运算符。它不一定返回布尔值。这与其他一些语言不同。如果你想打电话给不同的“奇怪”,欢迎你提出意见。但是,它就是它,它一直是Javascript中的这种方式。
很容易理解它的作用并将其用于此。一旦理解了设计意图,它的规范或实现就没有真正的陌生感或不可预测性。
它与来自其他语言的某些人可能期望的不同,但这不是任何语言的目标。每种语言都有自己的设计,必须学会正确使用它。