发布于 2026-01-06 5 阅读
0

神秘的双波浪号 (~~) Operation DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

神秘的双波浪号(~~)操作

由 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()

在 iPhone XS 上,~~速度也比其他机型快得多:

祝您编程愉快!

文章来源:https://dev.to/asadm/the-mysterious-double-tilde-operation-mih