<分区>
我有从另一个地方复制的这一行:
Total += parseFloat($(this).val())|0;
运算符|
的作用是什么?当我更改数字时,会得到不同的结果。
<分区>
我有从另一个地方复制的这一行:
Total += parseFloat($(this).val())|0;
运算符|
的作用是什么?当我更改数字时,会得到不同的结果。
最佳答案
JavaScript 中的 |
是一个 integer bitwise OR operator .在这种情况下,它会去除 parseFloat
返回的任何小数部分。表达式 parseFloat($(this).val())
将产生一个带有(可能)小数部分的数字,但是 |0
将是 convert it to an integer number , OR 它与 0
(这意味着它不会改变),所以总的结果是得到一个整数。
因此在功能上,它 chop 数字的小数部分。 -1.5
变为 -1
,1.5
变为 1
。这类似于 Math.floor
,但 chop 而不是“向下”舍入(Math.floor(-1.5)
是 -2
— 下一个最低整数——而不是 |0
版本给我们的-1
)。
所以也许这就是使用它来 chop (而不是“下限”)数字的小数部分的原因。
或者,这可能是一个拼写错误。该代码的作者可能打算这样写(注意||
而不是|
):
Total += parseFloat($(this).val()) || 0;
防止 $(this).val()
返回 ""
或类似的可能性,从而导致 parseFloat
返回 NaN
。它使用 the curiously-powerful ||
operator在这种情况下返回 0
而不是 NaN
。 (还有一则广告要求在您的运算符周围放置空格。)必须知道代码的上下文才能说明 chop 为整数 (|
) 是否有意义添加到 Total
,或者他们只是在为 NaN
案例辩护。
关于javascript - "|"(管道)运算符的功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472970/
相关文章:
java - Java 的 C++ 仿函数,重载运算符 ()()
javascript - 为什么我的提交条件没有返回 false?
javascript - 基于Javascript Condition渲染 Blade 模板
Javascript 在 Google Hangouts 中一直向上滚动
javascript - javascript 中的 Django 列表项
c++ - 是>?或 <?任何 C++ 方言中的合法运算符?
.net - 覆盖 Equals 方法时是否需要覆盖 == 和 != 运算符? (。网)