什么是“|”的功能(管道)操作员?

时间:2012-02-27 21:57:57

标签: javascript operators

我从另一个地方复制了这一行:

Total += parseFloat($(this).val())|0;

运营商|的功能是什么?当我改变数字时,我会得到不同的结果。

2 个答案:

答案 0 :(得分:13)

JavaScript中的|integer bitwise OR operator。在这种情况下,它会剥离parseFloat返回的任何小数部分。表达式parseFloat($(this).val())将生成一个带(可能)小数组件的数字,但是|0convert it to an integer number,或者0,这意味着它不会更改),因此总体结果是得到一个整数。

在功能上,它截断数字的小数部分。 -1.5变为-11.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。