ES6学习笔记5 数值的扩展

逆向实战:TikTok X-Gorgon算法解析与Unidg补环境技巧 本文详细解析了TikTok X-Gorgon算法的逆向工程全流程,包括参数定位、变种RC4算法还原及Unidbg补环境技巧。通过动态调试与静态分析相结合,揭示了X-Gorgon的生成逻辑和加密细节,为移动安全研究提供了实用指南。 阅读详情

二进制和八进制表示法

在ES5中,使用前缀0表示八进制,利用toString(2)方法将数值转换为二进制。在ES6中,提供了二进制和八进制数值的新写法,分别用0b(或0B)和0o(或0O)来表示。

0b111110111 === 503 // true
0o767 === 503 // true

要将0b或0o前缀的字符串数值转换为十进制,可以使用Number方法

Number('0b111')  // 7
Number('0o10')  // 8

Number.isFinite() 和 Number.isNaN()

ES6新增了Number.isFinite()和 Number.isNaN()方法分别用于检测一个数值是否为有限的以及是否为NaN。

Number.isFinite(0.8);  //true
Number.isFinite(Infinite);  //false
Number.isFinite('15');  //false
Number.isNaN(NaN);    //true
Number.isNaN(15);    //false
Number.isNaN(9/NaN);    //true
Number.isNaN('15');    //false

与传统的isFinite()和isNaN()方法区别在于,新方法不会先调用Number()将非数值转换为数值,再进行判断。因此新方法只读数值有效,对于非数值一律返回false。


Number.parseInt() 和 Number.parseFloat()

ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。


Number.isInteger()

Number.isInteger()判断一个值是否为整数,在js中,整数和浮点数都是同样的存储方法,因此3和3.0返回的值都是true,该方法只对数值有效,非数值一律为false。

Number.isInteger(25);  //true
Number.isInteger(25.0);  //true

Number.EPSILON

ES6 在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。实际上其是 JavaScript 能够表示的最小精度,引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。

Number.EPSILON === Math.pow(2, -52)
// true
Number.EPSILON
// 2.220446049250313e-16

Number.EPSILON可以用来设置“能够接受的误差范围”,即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。


安全整数和Number.isSafeInteger()

JavaScript 能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),这是在JS中,所有数字都用64位双精度浮点数存储,其由1符号位,11位指数和52位尾数位组成。其中尾数部分按照IEEE754标准被省略了一个最高位1,因此实际上精度为53位。http://blog.jobbole.com/74199/

ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示安全整数范围的上下限

Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内

Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(9007199254740992) // false
Number.isSafeInteger(1.2) // false
Number.isSafeInteger('a') // false
Number.isSafeInteger(9007199254740990) // true

实际使用这个函数时,需要注意。验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值,因为非安全整数可能经过运算后得到错误结果,而该错误结果可能是一个安全整数


Math对象的扩展

Math.trunc()

Math.trunc方法用于去除一个数的小数部分,返回整数部分。对于非数值,Math.trunc内部使用Number方法将其先转为数值,对于空值和无法截取整数的值,返回NaN。

Math.trunc(4.1);  //4

Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。其可能会返回的值如下:

  • 参数为正数,返回+1
  • 参数为负数,返回-1
  • 参数为 0,返回0
  • 参数为-0,返回-0
  • 其他值,返回NaN
Math.sign(-5);  //-1
Math.sign(5);    //+1
Math.sign(0);    //+0
Math.sign('9');  //+1
Math.sign('a');  //NaN

Math.cbrt()

Math.cbrt方法用于计算一个数的立方根。对于非数值,Math.cbrt方法内部也是先使用Number方法将其转为数值,不能转换,则返回NaN

Math.cbrt(8);  //2

Math.clz32()

JavaScript 的数值都以64位格式存储,但位操作符并不直接操作64位的值,而是先将64位转为32位的整数,然后执行操作,最后再将结果转换为64位。对于开发人员来说,整个过程就像只存在32位整数一样。Math.clz32方法返回一个数的 32 位无符号整数形式有多少个前导 0。对于小数,Math.clz32方法只考虑整数部分。对于空值或其他类型的值,Math.clz32方法会将它们先转为数值,然后再计算

Math.clz32(0) // 32
Math.clz32(1) // 31
Math.clz32(1000) // 22
Math.clz32(0b01000000000000000000000000000000) // 1
Math.clz32(0b00100000000000000000000000000000) // 2

左移运算符(<<)与Math.clz32方法直接相关

ath.clz32(1) // 31
Math.clz32(1 << 1) // 30
Math.clz32(1 << 2) // 29
Math.clz32(1 << 29) // 2

Math.imul()

Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数

Math.imul(2, 4)   // 8
Math.imul(-1, 8)  // -8

在32位情况下,大多数情况Math.imul(a, b)与a * b的结果是相同的。但当超过JS的表达安全整数范围后,普通运算的结果往往不精确,Math.imul方法可以返回正确的低位数值。

Math.imul(0x7fffffff, 0x7fffffff) // 1

Math.fround()

Math.fround方法返回一个数的32位单精度浮点数形式(1个符号位,8个指数,23个尾数)。所以对于 -2^24 至 2^24 之间的整数(不含两个端点),返回结果与参数本身一致。如果参数的绝对值大于 2^24,返回的结果便开始丢失精度。

对于 NaN 和 Infinity,此方法返回原值。对于其它类型的非数值,Math.fround 方法会先将其转为数值,再返回单精度浮点数

该方法主要作是将64位双精度浮点数转为32位单精度浮点数,如果小数的精度超过24位,返回值就会出现差异,否则不变。

// 未丢失有效精度
Math.fround(1.125) // 1.125
Math.fround(7.25)  // 7.25

// 丢失精度
Math.fround(0.3)   // 0.30000001192092896
Math.fround(0.7)   // 0.699999988079071
Math.fround(1.0000000123) // 1

Math.hypot()

Math.hypot方法返回所有参数的平方和的平方根。如果参数不是数值,Math.hypot方法会将其转为数值。只要有一个参数无法转为数值,就会返回 NaN

Math.hypot(3,4);   //5
Math.hypot(3, 4, 5);     // 7.0710678118654755

Math.expm1()、Math.log1p()、Math.log10()和Math.log2()

ES6新增了4个对数方法

(1) Math.expm1()
Math.expm1(x)返回 e^x - 1,即Math.exp(x) - 1

(2) Math.log1p()
Math.log1p(x)返回In(x+1),即Math.log(1+x)

(3)Math.log10()
Math.log10(x)返回以 10 为底的x的对数。如果x小于 0,则返回 NaN
(4)Math.log2()
Math.log2(x)返回以 2 为底的x的对数。如果x小于 0,则返回 NaN。

双曲函数方法

ES6新增了6个双曲函数方法

  • Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)

  • Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)

  • Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)

  • Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)

  • Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)

  • Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

指数运算符

ES6新增了指数运算符(**),其可以与等号结合,形成一个新的赋值运算符(**=)

2**2   //4
2**3   //8
let a=1.5;
a **= 2;
5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型 本文提供了一份快速部署指南,教你如何在5分钟内利用FunASR工具包在本地电脑上启动达摩院Paraformer语音识别模型。Paraformer作为一款非自回归端到端模型,以其推理速度快、识别精度高的特点,结合FunASR的一键式模型加载和统一API,让开发者能轻松构建本地语音识别系统,极大降低了前沿AI技术的应用门槛。 阅读详情

相关推荐

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1617

ES6 数值的扩展(十八)

但是由于这两个二进制数的最低位都是 1,所以这个结果肯定是不正确的,因为根据二进制乘法,计算结果的二进制最低位应该也是 1。这个错误就是因为它们的乘积超过了 2 的 53 次方,JavaScript 无法保存额外的精度,就把低位的值都变成了 0。将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效, Number.isFinite() 对于非数值一律返回 false ,Number.isNaN() 只有对于NaN才返回true ,非 NaN 一律返回 false。我们知道浮点数计算是不精确的。

qq_35876316的博客 1681

用于可靠的钙钛矿薄膜瞬时光致发光模拟的拟合程序

简介 对光激发后的电荷载流子动态的研究对于确定太阳能电池的几个特性至关重要,例如,体和界面重组的数量以及向电荷传输层转移过程的速度。 瞬态光致发光(trPL)是用于研究这些特性的最流行的表征方法之一。 该实验是通过在样品上照射几纳秒的激光脉冲,并记录一段时间内的发光情况来进行的。辐射性重组的光生电荷载流子将引起太阳能电池的光子发射,而非辐射性重组的电荷载流子将不会对发光作出贡献。因此,可以测量到强度随时间递减的光致发光瞬态。(见图1表示trPL的测量和它的输出)。 图1. 一...

FluximAG的博客 2362

es6--利用剩余参数求平均值

<script> //利用剩余参数求平均值 const average = (...args) => { let sum = 0; let avg = 0; for (let i = 0; i < args.length; i++) { sum += args[i]; avg = sum / args.length..

小白小白从不日别的博客 326

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

文章目录一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、遇到的问题 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 一、卸载node 如果你已经安装了node,那么你需要先卸载node,如果你没有安装那直接跳过这一步到下一步。 打开控制面板 -> 打开程序和功能 -> 右上角搜索输入node -> 右键卸载 为了确保彻底

HuangsTing的博客 41万+

从零到一:KUKA机械臂与ROS的工业级通讯协议深度解析

本文深度解析KUKA机械臂与ROS的工业级通讯协议,重点对比EKI与RSI两种核心接口的技术特点与应用场景。详细介绍了网络架构设计、数据包解析机制及ROS-I集成方法,并提供实时性能优化与故障排除策略,为工程师实现高可靠性工业自动化集成提供完整解决方案。

2a4s6d8f0g的博客 296

ES6 Math对象的扩展

ES6 Math对象的扩展 ES6在Math对象上新增了17个与数学相关的方法。所有这些方法都是静态方法,只能在Math对象上调用。 Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分。 Math.trunc(4.1) // 4 Math.trunc(4.9) // 4 Math.trunc(-4.1) // -4 Math.trunc(-4.9) // -4 Math.trunc(-0.1234) // -0 对于非数值,Math.trunc内部使用Number方法将

cake_eat的博客 255

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

本文详细介绍了一个基于YOLOv5/v6/v7/v8的体育赛事目标检测系统的设计与实现。系统采用先进的深度学习算法,结合PySide6图形界面,实现了对体育赛事中运动员、球类、裁判等多种目标的实时检测与跟踪。本文将全面阐述系统的架构设计、算法原理、训练流程、界面实现以及实际应用效果,并提供完整的代码实现。

YOLO 509

ES6 数值的扩展

数值的扩展

松柏手记 316

详细推导波特图增益和相位曲线

最近因为项目需求,在回看波特图方面的内容。大三那会,《自动控制原理》这本书里面就讲过这些东西,但是那时候总感觉学这些没啥用,反正以后也用不到,对这种课程的重视度不是很高。 工作后发现,只要你从事的是和本专业相关的工作,大学学过的很多理论课程在后面大概率都会用到。曾经那些我们在学校以为用不上的东西,熟不知在后面用处还多着呢。所以啊,仅仅只是我们的以为而已! 现在还在学校的同学,对待《自动控制理论》、《信号与系统》、《通信原理》这样的核心专业课,建议还是好好学习一下,认真听听课。哪怕是考试完以后就会忘掉,但当我

D_Katter的博客 3936

ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。

m0_51430584的博客 3094

ES6数值的扩展

ES6 在对象上,新提供了和两个方法。用来检查一个数值是否为有限的(finite)。 用来检查一个值是否为。和全局函数 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 的时候才会返回 。 Number.parseInt()、Number.parseFloat() ES6 将全局方法和,移植到对象上面,行为完全保持不变。 这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。 Number.isInteger() 用来判断一个值是否为整数。需要注意的是,

啨天的博客 244

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 237

ES6语法学习笔记(5)-数值扩展

ES6语法学习笔记(4)-数值扩展 { // 二进制 console.log('B',0B111110111);//B 503 // 八进制 console.log(0o767);//503 } 判断数字是否有限 { console.log('15',Number.isFinite(15));//15 tNaN falserue// consol...

qq_41537989的博客 181

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ES6之数值的扩展

TOCNaN/TOC。

BradenHan的专栏 2369

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ES6,新增语法整理之数值的扩展

确切地说,JS 中的Number类型只能安全地表示-9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效。ES2020 引入了一种新的数据类型 BigInt(大整数),BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

m0_37749760的博客 1760

全栈之路——前端(一):ES6之数值、运算符的扩展

JS中所有数字都是64位双精度浮点数,进而导致数值的精度只能精确到53个二进制位,及16个十进制位,大于这个范围的整数无法精确表示,大于或等于2的1024次方的数也会无法表示,返回Infinity。表示JS的最小精度,相当于2的-52次方,主要是为了给浮点数计算设置一个误差范围,比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。Math.log2(x)返回以 2 为底的x的对数。

whu_three的博客 1110

ES6基础-ES6的扩展

进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...

程序员哆啦A梦,蓝胖子 5069

ES6新增数值的扩展

Number.isFinite(), Number.isNaN() ES6在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法 Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity; Number.isFinite(12) // true Number.isFinite(0.8) // true...

qq_38718629的博客 1066

es6 数值的扩展

数值的扩展Number.isNaN()Number.isFinite()Number.parseInt()Number.parseFloat()Number.isInteger()Number.EPSILONMath...指数运算符`(**)` Number.isNaN() 传统的isNaN()函数会把非数值的参数转化成数值再进行判断 isNaN('str'); // true // ...

Hassan的小博客! 1141

ES6 数值的扩展、数组的扩展

ES6 数值的扩展、数组的扩展 一、数值的扩展 1,二进制和八进制的表示 ES6提供了二进制和八进制数值的新的写法 二进制前缀:0b、0B 八进制前缀:0o、0O 2,Number.isFinite() 和 Number.isNaN() 方法 Number.isFinite() 用来检验一个数值是否非无穷(infinite)。 例: //infinite 极大的 无法测量的 无穷 console.log(Number.isFinite(5)); //true

kangyi158的博客 267

【前端】ES6:数值扩展、对象扩展、函数扩展

但是 fun 因为是箭头函数,所以 this 不指向 obj,而是指向 fun 的外层,就是 window。按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。按照我们之前的 this 指向来判断,两个都应该指向 obj。使用自己想要的参数替换原数组内容,但是会改变原来的数组。箭头函数是 ES6 里面一个简写函数的语法方式。将一组值转化为数组,即新建数组。方法判断两个值是否是相同的值。将类数组对象转换为真正数组。

weixin_45980065的博客 1189

ES6 (六)数值的扩展、数值分隔符、isInteger、EPILON、MAX_SAFE_INTEGER、Math扩展、BigInt

ES6 (六)数值的扩展、数值分隔符、isInteger、EPILON、MAX_SAFE_INTEGER、Math扩展、BigInt 文章目录ES6 (六)数值的扩展、数值分隔符、isInteger、EPILON、MAX_SAFE_INTEGER、Math扩展、BigInt1. 二进制和八进制表示法2. 数值分隔符3. Number.isFinite(), Number.isNaN()4. Number.parseInt(), Number.parseFloat()5. Number.isInteger()

qq_43456781的博客 1250

ES6 class-数值扩展-方法扩展

ES6新特性

weixin_41909678的博客 463

ES6学习总结之数值的扩展

ES6学习总结之数值的扩展1. 二进制和八进制2. Number.isFinite()和Number.isNaN()3. Number.parseInt()和Number.parseFloat()4. Number.isInteger()5. Number.EPSILON6. 安全整数和Number.isSafeInteger()7. Math对象的扩展8. 指数运算符9. BigInt数据类型BigInt对象转换规则 1. 二进制和八进制 0b开头的数值表示二进制数; 0o开头的数值表示八进制数; 可以用

weixin_43737327的博客 368

ES6 数值 新特性

传统方式     在介绍数值的扩展之前来看看旧的规范和使用方式,有对比才能看出不同之处. 在ES5中,存在一些全局函数如: isNaN(),parseInt(),parseFloat() 等. 但是大家有没有觉得把这类处理数值的函数归于window 对象有些不妥, 为了规范.在ES6中就把 parseInt() 这类数值相关的函数移植到了 Number 对...

AKALXH的博客 1776
上一篇: ES6学习笔记4 正则表达式的扩展
下一篇: ES6学习笔记6 函数的扩展
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值