我从另一个地方复制了这一行:
Total += parseFloat($(this).val())|0;
运营商|
的功能是什么?当我改变数字时,我会得到不同的结果。
答案 0 :(得分:13)
JavaScript中的|
是integer bitwise OR operator。在这种情况下,它会剥离parseFloat
返回的任何小数部分。表达式parseFloat($(this).val())
将生成一个带(可能)小数组件的数字,但是|0
将convert it to an integer number,或者0
,这意味着它不会更改),因此总体结果是得到一个整数。
在功能上,它截断数字的小数部分。 -1.5
变为-1
,1.5
变为1
。这类似于Math.floor
,但截断而不是舍入“向下”(Math.floor(-1.5)
是-2
- 下一个最低整数 - 而不是-1
正如|0
版本给我们的那样。)
所以也许这就是为什么它被用来砍掉(而不是“落地”)数字的小数部分。
或者,它可能是一个错字。该代码的作者可能打算写这个(注意||
而不是|
):
Total += parseFloat($(this).val()) || 0;
防止$(this).val()
返回""
或类似内容的可能性,导致parseFloat
返回NaN
。在这种情况下,它使用the curiously-powerful ||
operator返回0
而不是NaN
。 (并且有一个广告,用于在您的运算符周围放置空格。)必须知道代码的上下文,以便说明在添加到{时截断为整数(|
)是否有意义{1}},或者他们只是在捍卫Total
案例。
答案 1 :(得分:3)
javascript中的|
运算符是按位运算符
该运算符将操作数视为32位整数,如果其中任一位为1则返回1,否则返回1。