javascript - "|"(管道)运算符的功能是什么?

标签 javascript operators

<分区>

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

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 变为 -11.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/

相关文章:

vim - 普通模式下的 Vi 组独立命令

java - Java 的 C++ 仿函数,重载运算符 ()()

javascript - 为什么我的提交条件没有返回 false?

javascript - 基于Javascript Condition渲染 Blade 模板

Javascript 在 Google Hangouts 中一直向上滚动

javascript - javascript 中的 Django 列表项

c++ - 是>?或 <?任何 C++ 方言中的合法运算符?

.net - 覆盖 Equals 方法时是否需要覆盖 == 和 != 运算符? (。网)

javascript - 如何在不切割单词的情况下将句子拆分为具有最大字符数的句子数组?

haskell - 在 Haskell 中避免++