jis*_*smo 518 javascript
我在一些代码中看到了这一点,我不知道它的作用:
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;
};
Run Code Online (Sandbox Code Playgroud)
什么是~~
运营商吗?
gho*_*ppe 662
这~~
是一个双非按位运算符.
它被用作更快的替代品Math.floor()
.
Guf*_*ffa 164
它隐藏了代码的意图.
它是两个单个波形符号运算符,因此它按位补码(按位不是)两次.操作相互取出,因此唯一剩下的效果是在应用第一个操作符之前完成的转换,即将值转换为整数.
有些人使用它作为更快的替代品Math.floor
,但速度差异并不那么显着,在大多数情况下,它只是微观优化.除非你有一段真正需要优化的代码,否则你应该使用代码来描述它所做的事情而不是使用非操作副作用的代码.
通过在浏览器中优化JavaScript引擎,运算符和函数的性能会发生变化.使用当前的浏览器,在某些浏览器中使用~~
而不是Math.floor
更快,而在某些浏览器中则不会更快.如果您真的需要额外的性能,则需要为每个浏览器编写不同的优化代码.
见:波浪与地板
bow*_*ior 120
~(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 )
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅:
Jas*_*use 20
差异非常简单:
长版
如果您想要更好的可读性,请使用Math.floor
.但是如果你想最小化它,请使用代字号~~
.
互联网上有很多消息来源说Math.floor
更快,但有时候~~
.我不建议您考虑速度,因为在运行代码时不会注意到它.也许在测试等,但没有人可以看到这里的差异.更快的是使用~~
更快的加载时间.
精简版
~~
更短/占用更少的空间.Math.floor
提高了可读性.有时代字号更快,有时Math.floor
更快,但不明显.
归档时间: |
|
查看次数: |
119353 次 |
最近记录: |