神秘的双波浪号(~~)操作
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
很久以前,我在优化一些游戏物理代码中的热路径,其中涉及大量的 ` Math.floor()and`parseInt()操作。我偶然发现了一种微优化方法,可以将 ` floator`转换为string` int.`
操作
console.log(~~1.6); // 1
发生了什么事?
单值~运算符是一个一元运算符,用于将给定的数字转换N为整数-(N+1)。例如:
console.log(~2); // -3
console.log(~1); // -2
console.log(~0); // -1
这个操作过于特殊,对大多数人来说用处不大。但是,如果应用两次这个操作,它就等同于Math.floor`or` parseInt。例如:
console.log(~~-1); // -1
console.log(~~0); // 0
console.log(~~1); // 1
console.log(~~"-1"); // -1
console.log(~~"0"); // 0
console.log(~~2.4); // 2
console.log(~~3.9); // 3
console.log(~~"1"); // 1
console.log(~~true); // 1
console.log(~~false); // 0
我应该在我的代码中使用它吗?
这要看情况。正如我所说,这只是一个微优化,只有当你的代码中频繁执行此操作时,性能提升才会显著。如果你注重代码的可读性,就不要使用它,因为它可能会让团队中的其他开发人员感到困惑。
性能比较
我写了一个简单的性能测试脚本来进行比较。
在桌面版 Chrome 浏览器上,Math.floor()速度几乎与以下浏览器一样快~~:
在桌面版 Safari 浏览器上,速度比两者都~~快得多:Math.floor()parseInt()
祝您编程愉快!
文章来源:https://dev.to/asadm/the-mysterious-double-tilde-operation-mih
