什么是JavaScript中的“双波浪号”(~~)运算符?[重复]

2020/09/24 06:00 · javascript ·  · 0评论

我在一些代码中看到了这一点,但我不知道它的作用:

var jdn = function(y, m, d) {
  var tmp = (m <= 2 ? -1 : 0);
  return ~~((1461 * (y + 4800 + tmp)) / 4) + 
         ~~((367 * (m - 2 - 12 * tmp)) / 12) - 
         ~~((3 * ((y + 4900 + tmp) / 100)) / 4) + 
         d - 2483620;
};

什么是~~运营商做?

~~是一个双重NOT按位运算符。

它用作的更快替代品Math.floor()

它隐藏了代码的意图。

它是两个单一的波浪号运算符,因此它两次执行一次按位补码(按位取反)。这些操作相互抵消,因此唯一剩下的效果是在应用第一个运算符之前进行的转换,即将值转换为整数。

有些人将其用作的更快替代品Math.floor,但速度差异并不那么显着,在大多数情况下只是微优化。除非您有一段确实需要优化的代码,否则应使用描述其功能的代码,而不是使用非操作的副作用的代码。

2011-08更新:

通过优化浏览器中的JavaScript引擎,操作员和函数的性能会发生变化。在当前的浏览器中,使用~~代替Math.floor在某些浏览器会更快,而在某些浏览器中根本不会更快。如果您确实需要额外的性能,则需要为每个浏览器编写不同的优化代码。

另请:波浪线与地板

~(5.5)   // => -6
~(-6)    // => 5
~~5.5    // => 5  (same as Math.floor(5.5))
~~(-5.5) // => -5 (NOT the same as Math.floor(-5.5), which would give -6 )

有关更多信息,请参见:

区别很简单:

长版

如果要提高可读性,请使用Math.floor但是,如果要将其最小化,请使用tilde ~~

互联网上有很多消息来源说Math.floor速度更快,但是有时~~我不建议您考虑速度,因为在运行代码时不会注意到速度。也许正在测试等中,但是没有人可以在这里看到差异。更快的方法是使用~~更快的加载时间。

精简版

~~较短/占用较少的空间。Math.floor提高了可读性。有时波浪号会更快,有时Math.floor会更快,但并不引人注意。

本文地址:http://javascript.askforanswer.com/shenmeshijavascriptzhongdeshuangbolanghaoyunsuanfuzhongfu.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!