当前位置: 首页 > news >正文

JavaScript 的 ~~ 运算和floor 的性能差异

在JavaScript中,~~(双波浪号)和Math.floor()都可以用于向下取整,但它们在行为和性能上有一些差异。要测试这两者之间的性能差异,你可以使用JavaScript的performance.now()方法来进行基准测试。

行为差异

  1. Math.floor():

    • 对于正数,它向下取整。
    • 对于负数,它远离0的方向取整(即更负)。
    • 对非数值进行操作时返回NaN
  2. ~~:

    • 实际上是一个位操作符,它首先将数字转换为32位整数,如果数字不在32位整数的范围内,会发生溢出。
    • 对于正数和负数,它向0的方向取整。
    • 对非数值进行操作时,它通常会将其转换为0。

性能测试

要比较~~Math.floor()的性能,可以编写一个简单的基准测试脚本:

function testPerformance(func, iterations) {var start = performance.now();for (var i = 0; i < iterations; i++) {func(Math.random() * 1000 - 500);}var end = performance.now();return end - start;
}var iterations = 1000000; // 测试的迭代次数
var timeForFloor = testPerformance(function(x) { return Math.floor(x); }, iterations);
var timeForDoubleTilde = testPerformance(function(x) { return ~~x; }, iterations);console.log('Math.floor(): ' + timeForFloor + 'ms');
console.log('~~: ' + timeForDoubleTilde + 'ms');

在这个脚本中,我们创建了一个testPerformance函数,它接受一个函数和迭代次数作为参数。我们用随机数来测试Math.floor()~~,然后记录下所需的时间。
在这里插入图片描述
可以看出差异并不大,百万级调用才有10ms的差异,几乎可以忽略不计。

何时使用哪个

  • 如果你需要绝对的精确性和对边界值的正确处理(特别是对于非数值或极大的数值),使用Math.floor()更为妥当。
  • 如果你正在处理的是正数或负数,并且对性能有较高的要求,可以考虑使用~~。但请注意,这只适用于32位整数范围内的数字。

在大多数现代JavaScript引擎中,性能差异可能不太明显,除非你正在进行大量的计算。因此更重要的是考虑它们的行为差异和代码的可读性。


看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

相关文章:

JavaScript 的 ~~ 运算和floor 的性能差异

在JavaScript中&#xff0c;~~&#xff08;双波浪号&#xff09;和Math.floor()都可以用于向下取整&#xff0c;但它们在行为和性能上有一些差异。要测试这两者之间的性能差异&#xff0c;你可以使用JavaScript的performance.now()方法来进行基准测试。 行为差异 Math.floor()…...

AtCoder Beginner Contest 338F - Negative Traveling Salesman【floyd+状态压缩dp】

原题链接&#xff1a;https://atcoder.jp/contests/abc338/tasks/abc338_f Time Limit: 6 sec / Memory Limit: 1024 MB Score: 500 points、 问题陈述 有一个有N个顶点和M条边的加权简单有向图。顶点的编号为 1 到 N&#xff0c;i/th 边的权重为 Wi​&#xff0c;从顶点 U…...

UDP/TCP协议特点

1.前置知识 定义应用层协议 1.确定客户端和服务端要传递哪些信息 2.约定传输格式 网络上传输的一般是二进制数据/字符串 结构化数据转二进制/字符串 称为序列化 反之称之为反序列化 下面就是传输层了 在TCP/IP协议中,我们以 目的端口,目的IP 源端口 源IP 协议号这样一个五…...

编程笔记 html5cssjs 059 css多列

编程笔记 html5&css&js 059 css多列 一、CSS3 多列属性二、实例小结 CSS3 可以将文本内容设计成像报纸一样的多列布局. 一、CSS3 多列属性 下表列出了所有 CSS3 的多列属性&#xff1a; 属性 描述 column-count 指定元素应该被分割的列数。 column-fill 指定如何填充…...

Facebook的元宇宙探索:虚拟社交的新时代

近年来&#xff0c;科技的飞速发展推动着人类社交方式的翻天覆地的改变。在这场数字化革命的浪潮中&#xff0c;社交媒体巨头Facebook正积极探索并引领着一个被誉为“元宇宙”的全新领域&#xff0c;试图为用户打造更为真实、丰富的虚拟社交体验。 元宇宙的崛起 元宇宙这个概念…...

用React给XXL-JOB开发一个新皮肤(四):实现用户管理模块

目录 一. 简述二. 模块规划 2.1. 页面规划2.2. 模型实体定义 三. 模块实现 3.1. 用户分页搜索3.2. Modal 配置3.3. 创建用户表单3.4. 修改用户表单3.5. 删除 四. 结束语 一. 简述 上一篇文章我们实现登录页面和管理页面的 Layout 骨架&#xff0c;并对接登录和登出接口。这篇…...

某赛通电子文档安全管理系统 hiddenWatermark/uploadFile 文件上传漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…...

Redis五种数据类型及应用场景

1、数据类型 String(字符串&#xff0c;整数&#xff0c;浮点数)&#xff1a;做简单的键值对缓存 List(列表)&#xff1a;储存一些列表类型的数据结构 Hash(哈希)&#xff1a;包含键值对的无序散列表&#xff0c;结构化的数据 Set(无序集合)&#xff1a;交集&#xff0c;并集…...

测试环境搭建整套大数据系统(一:基础配置,修改hostname,hosts,免密)

一&#xff1a;使用服务器配置。 二&#xff1a;修改服务器名称hostname&#xff0c;hosts。 在 Linux 系统中&#xff0c;hostname 和 /etc/hosts 文件分别用于管理主机名和主机名解析。 在三台服务器上&#xff0c;分别执行以下命令。 vim /etc/hostnamexdso-hadoop-test-0…...

maven helper 解决jar包冲突方法

一 概要说明 1.1 说明 首先&#xff0c;解决idea中jar包冲突&#xff0c;使用maven的插件&#xff1a;maven helper插件&#xff0c;它能够给我们罗列出来同一个jar包的不同版本&#xff0c;以及他们的来源&#xff0c;但是对不同jar包中同名的类没有办法。 1.2 依赖顺序 …...

AppSrv-文件共享(23国赛真题)

2023全国职业院校技能大赛网络系统管理赛项–模块B:服务部署(WindowServer2022) 文章目录 AppSrv-文件共享题目配置步骤创建用户主目录共享文件夹:本地目录为d:\share\users\,允许所有域用户可读可写。在本目录下为所有用户添加一个以名称命名的文件夹,该文件夹将设置为所…...

AsyncLocal是如何实现在Thread直接传值的?

一&#xff1a;背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候&#xff0c;有朋友提出了AsyncLocal是如何实现的&#xff0c;虽然做了口头上的表述&#xff0c;但总还是会不具体&#xff0c;所以觉得有必要用文字图表的方式来系统…...

Flask 入门1:一个简单的 Web 程序

1. 关于 Flask Flask诞生于2010年&#xff0c; Armin Ronacher的一个愚人节玩笑。不过现在已经是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架&#xff0c;它主要面向需求简单&#xff0c;项目周期短的小应用。 Flask本身相当于一个内核&#xff0c;其他几乎所…...

维护管理Harbor,docker容器的重启策略

维护管理Harbor 通过HarborWeb创建项目 在 Harbor 仓库中&#xff0c;任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。 单击“项目”&#xff0c;填写项目名称&#xff0c;项目级别若设置为"私有"&#xff0c;则不勾选。如果设置为公共仓库&#…...

Qt6入门教程 14:QToolButton

目录 一.简介 二.常用接口 1.void setMenu(QMenu * menu) 2.void setPopupMode(ToolButtonPopupMode mode) 3.void setToolButtonStyle(Qt::ToolButtonStyle style) 4.void setArrowType(Qt::ArrowType type) 5.void setDefaultAction(QAction * action) 三.实战演练 1…...

3D数据转换器HOOPS Exchange如何获取模型的几何数据? 干货预警!

一、概述 前面讲解过模型在内存中的结构&#xff0c;现在回顾一下&#xff0c;当模型导入成功后&#xff0c;整个模型数据会以原生结构的 PRC 组装树形式存放到内存中。&#xff08;申请 HOOPS Exchange 试用&#xff09; PRC结构的主要类型包含四种&#xff0c;分别是…...

Coremail启动鸿蒙原生应用开发,打造全场景邮件办公新体验

1月18日&#xff0c;华为在深圳举行鸿蒙生态千帆启航仪式&#xff0c;Coremail出席仪式并与华为签署鸿蒙合作协议&#xff0c;宣布正式启动鸿蒙原生应用开发。作为首批拥抱鸿蒙的邮件领域伙伴&#xff0c;Coremail的加入标志着鸿蒙生态版图进一步完善。 Coremail是国内自建邮件…...

基于CVITEK_CV1821+SOI_Q03P的IPC方案

方案概述&#xff1a; 该方案基于主控平台CVITEK_CV1821和sensor SOI_Q03P&#xff0c;运用于智能监控IP摄像头&#xff0c;可用于户外或室内。采用了2304x1296的分辨率&#xff0c;30的帧率&#xff0c;支持HDR。作为3M的监控摄像头&#xff0c;通过ISP图像调校技术&#xff…...

chromedriver安装和环境变量配置

chromedriver 1、安装2、【重点】环境变量配置&#xff08;1&#xff09;包的复制&#xff1a;&#xff08;2&#xff09;系统环境变量配置 3、验证 1、安装 网上随便搜一篇chromedriver的安装文档即可。这里是一个快速链接 特别提醒&#xff1a;截止2024.1.30&#xff0c;chr…...

Linux浅学笔记03

目录 有关root的命令 用户和用户组 用户组管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户组: 删除用户组&#xff1a; 用户管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户&#xff1a; 删除用户&#xff1a; 查看用…...

WSL2开发环境部署

系统要求 安装前需要确保设备满足以下条件: 操作系统: Windows 10版本2004(内部版本19041)或Windows 11(按Win R输入winver查看版本)。硬件: 64 位处理器(需要在BIOS中启用虚拟化,Intel VT-x/AMD-V) 至少4GB内存(推荐8GB)。 20GB以上存储空间(建议SSD)。 启用必要功能 …...

DBSCAN与GMM串联:从盖亚天文大数据中自动发现恒星关联结构

1. 项目概述&#xff1a;当机器学习遇见星空在盖亚&#xff08;Gaia&#xff09;卫星释放出海量高精度天体测量数据之前&#xff0c;天文学家识别一个疏散星团的成员星&#xff0c;往往需要结合自行、视差、颜色-星等图&#xff08;CMD&#xff09;等多维信息&#xff0c;在复杂…...

祖玛游戏开发:状态机与路径拓扑的工程实践

1. 祖玛游戏到底在考什么&#xff1a;不是炫技&#xff0c;而是对状态机与碰撞逻辑的精准拿捏祖玛&#xff08;Zuma&#xff09;看起来只是几颗彩球连成线就爆炸的休闲游戏&#xff0c;但真正动手实现时&#xff0c;你会发现它像一块试金石——C#、C 和 Java 三门语言各自最常被…...

深入理解RAG中的嵌入模型Embedding Model

前言在当前流行的RAG引擎&#xff08;例如RAGFlow、Qanything、Dify、FastGPT等&#xff09;中&#xff0c;嵌入模型&#xff08;Embedding Model&#xff09;是必不可少的关键组件。在RAG引擎中究竟扮演着怎样的角色呢&#xff1f;本文笔者进行了总结&#xff0c;与大家分享~什…...

告别刻录光盘!用Rufus 4.5快速搞定Win10 U盘安装盘(保姆级图文指南)

用Rufus 4.5打造Win10 U盘安装盘的终极指南在数字时代&#xff0c;光驱已经逐渐退出历史舞台&#xff0c;但系统安装的需求依然存在。传统的光盘安装方式不仅速度慢&#xff0c;而且对硬件有要求。相比之下&#xff0c;U盘安装系统更加高效便捷。本文将详细介绍如何使用Rufus 4…...

如何快速获取全网无损音乐:洛雪音乐音源完整使用指南

如何快速获取全网无损音乐&#xff1a;洛雪音乐音源完整使用指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否经常遇到这样的困境&#xff1a;深夜想听一首歌&#xff0c;却发现版权分散…...

APP 的架构设计

APP 的架构设计是指构建移动应用时的整体结构规划&#xff0c;主要解决“代码怎么组织、模块怎么分工、数据怎么流动、功能怎么扩展”等问题。一个好的架构能让 APP 更稳定、更易维护、更易多人协作和长期迭代。下面从常见架构模式 → 核心分层 → 设计原则 → 技术选型 → 实际…...

【架构实战】解决长文本多轮对话中的“上下文腐化”问题:基于 Multi-Agent 的异步调度引擎设计

大家好&#xff0c;最近在研究 LLM 辅助编程和多角色对话时&#xff0c;我发现了一个非常头疼的问题&#xff1a;“上下文腐化”&#xff08;Context Rot&#xff09;。 当你在一个 Session 里塞入多个 System Prompt&#xff08;比如试图让几个不同的 AI 角色在一个群里聊天&…...

兆赫兹X射线光子相关光谱技术原理与应用

1. 兆赫兹X射线光子相关光谱技术概述X射线光子相关光谱&#xff08;XPCS&#xff09;作为研究软物质动态特性的重要工具&#xff0c;其核心原理是通过分析相干X射线散射形成的散斑图样随时间的变化来揭示纳米尺度的动力学过程。这项技术的独特之处在于能够探测传统光学方法难以…...

https://pypi.tuna.tsinghua.edu.cn/simple/

清华镜像源 https://pypi.tuna.tsinghua.edu.cn/simple/...