[ES6] 数值

2023/11/29 21:35:38

[ES6] 数值

  • 数值的表示
  • Number
    • 常量 Number.EPSILON
    • 安全整数
      • 属性特性
    • Number 对象新方法
      • 方法简介
      • 方法特性
  • Math 对象的扩展
    • 方法简介
    • 方法特性
    • 方法实例

数值的表示

  • 二进制表示法:添加前缀 0b 或者 0B
  • 八进制表示法:添加前缀 0o 或者 0O
console.log(0b11 === 3); // true
console.log(0o11 === 9); // true

Number

常量 Number.EPSILON

  • Number.EPSILON 属性表示 1 与大于 1 的最小浮点数之间的差
    • 该值接近于 2.2204460492503130808472633361816E-16,或者 2-52
    • 属性特性
      • writable:false
      • enumerable:false
      • configurable:false

测试数值是否在误差范围内,在误差范围内即视为相等:

0.1 + 0.2 === 0.3; // false
equal = Math.abs(0.1 - 0.3 + 0.2) < Number.EPSILON; // true

安全整数

安全整数表示在 JavaScript 中能够精确表示的整数,安全整数的范围在 2 的 -53 次方到 2 的 53 次方之间(不包括两个端点),超过这个范围的整数无法精确表示。

最大安全整数,安全整数范围的上限,即 2 的 53 次方减 1 。

最小安全整数,安全整数范围的下限,即 2 的 53 次方减 1 的负数。

Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
Number.MAX_SAFE_INTEGER === Number.MAX_SAFE_INTEGER + 1; // false
Number.MAX_SAFE_INTEGER - 1 === Number.MAX_SAFE_INTEGER - 2; // false
Number.MIN_SAFE_INTEGER + 1 === Number.MIN_SAFE_INTEGER + 2; // false
Number.MIN_SAFE_INTEGER === Number.MIN_SAFE_INTEGER - 1; // false
Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2; // true

属性特性

  • writable:false
  • enumerable:false
  • configurable:false

Number 对象新方法

一些全局方法移植成 Number 对象的方法,逐步减少全局方法,用于全局变量的模块化,但是方法的行为没有发生改变。

方法简介

方法说明
Number.isFinite()检查数值是否为有限
Number.isNaN()检查值是否为 NaN
Number.parseInt()将给定字符串转化为指定进制的整数
Number.parseFloat()把字符串解析成浮点数
Number.isInteger()检查值是否为整数
Number.isSafeInteger()检查数值是否在安全范围

方法特性

  • Number.isFinite()
    • 检查数值是否为有限(finite),即不是 Infinity
    • isFinate 没有隐式类型转换,所有非数值都返回 false
  • Number.isNaN()
    • 非 NaN 全部返回 false
    • isNaN 判断前会将非数值隐式转换为数值类型
  • Number.parseInt(data,number)
    • 默认十进制
    • parseInt 具有隐式转换为数值类型
    • number 设置进程数
    • 与全局 parseInt() 函数是同一个函数
  • Number.parseFloat()
    • 无法解析的浮点数,则返回 NaN
    • 与全局 parseFloat() 函数是同一个函数
  • Number.isInteger()
    • NaN 和正负 Infinity 不是整数
    • JavaScript 内部,整数和浮点数采用的是同样的储存方法,因此 1 与 1.0 被视为相同的值
    • isInteger 没有隐式类型转换
console.log(Number.isFinite(1)); // true
console.log(Number.isFinite(0.1)); // true
console.log(Number.isFinite(NaN)); // false NaN 不是有限的
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(-Infinity)); // false
console.log(Number.isFinite("foo")); // false
console.log(Number.isFinite("15")); // false
console.log(Number.isFinite(true)); // false
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("true" / 0)); // true
Number.isNaN("NaN"); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("true"); // false
Number.parseInt("12.34"); // 12
Number.parseInt(12.34); // 12
Number.parseInt("0011", 2); //指定进制 3
Number.parseInt === parseInt; // true
Number.parseFloat("123.45"); // 123.45
Number.parseFloat("123.45abc"); // 123.45
Number.parseFloat("abc"); // NaN-无法解析的浮点数,则返回 NaN
Number.parseFloat === parseFloat; // true
Number.isInteger(0); // true
// JavaScript 中整数和浮点数是同样的储存方法,因此 1 与 1.0 被视为相同的值
Number.isInteger(1); // true
Number.isInteger(1.0); // true
Number.isInteger(1.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(NaN); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false

// 数值的精度超过 53 个二进制位时,由于第 54 位及后面的位被丢弃,会产生误判
Number.isInteger(1.0000000000000001); // true

// 一个数值的绝对值小于 Number.MIN_VALUE(5E-324),即小于 JavaScript 能够分辨的最小值,会被自动转为 0,也会产生误判
Number.isInteger(5e-324); // false
Number.isInteger(5e-325); // true
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false

Math 对象的扩展

ES6 在 Math 对象上新增了 17 个数学相关的静态方法,这些方法只能在 Math 中调用

方法简介

方法说明
普通计算
Math.cbrt()计算一个数的立方根
Math.imul()检查值是否为 NaN
Math.hypot()计算所有参数平方和的平方根
Math.clz32()返回 32 位无符号整数形式的前导 0 的个数
数字处理
Math.trunc()用于返回数字的整数部分
Math.fround()获取 32 位单精度浮点数形式
判断
Math.sign判断数字的符号(正、负、0)
对数方法
Math.expm1()计算 e 的 x 次方减 1,= Math.exp(x) - 1
Math.log1p(x)计算 1 + x 的自然对数,=Math.log(1 + x)
Math.log10(x)计算以 10 为底 x 的对数
Math.log2()用于计算 2 为底 x 的对数
双曲函数方法
Math.sinh(x)用于计算双曲正弦
Math.cosh(x)用于计算双曲余弦
Math.tanh(x)用于计算双曲正切
Math.asinh(x)用于计算反双曲正弦
Math.acosh(x)用于计算反双曲余弦
Math.atanh(x)用于计算反双曲正切
指数运算符**,右结合计算
**=类似于+=

方法特性

  • Math.cbrt
    • 支持隐式转换为数值类型
    • 无法转换的类型返回 NaN
  • Math.imul
    • 两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数
  • Math.hypot
    • 支持隐式转换为数值类型
    • 无法转换的类型返回 NaN
  • Math.clz32
    • 支持隐式转换为数值类型
    • 数值小数时向下取整
  • Math.trunc
    • 支持隐式转换为数值类型
    • 空值或无法转换的类型返回 NaN
    • 区分正负
  • Math.expm1
    • 支持隐式转换为数值类型
    • 无法转换为数值类型返回 NaN
  • Math.log1p(x)
    • 计算的是 x+1 的自然对数,底数为 E
    • x< -1 时返回 NaN

方法实例

Math.cbrt(1); // 1
Math.cbrt(0); // 0
Math.cbrt(-1); // -1
Math.cbrt("1"); // 1
Math.cbrt("hhh"); // NaN

// 大多数情况下,结果与 a \* b 相同
Math.imul(1, 2); // 2
// 用于正确返回大数乘法结果中的低位数值
Math.imul(0x7fffffff, 0x7fffffff); // 1

Math.hypot(3, 4); // 5
// 非数值会先被转换为数值后进行计算
Math.hypot(1, 2, "3"); // 3.741657386773941
Math.hypot(true); // 1
Math.hypot(false); // 0
// 空值会被转换为 0
Math.hypot(); // 0
Math.hypot([]); // 0
// 参数为 Infinity 或 -Infinity 返回 Infinity
Math.hypot(Infinity); // Infinity
Math.hypot(-Infinity); // Infinity
// 参数中存在无法转换为数值的参数时返回 NaN
Math.hypot(NaN); // NaN
Math.hypot(3, 4, "foo"); // NaN
Math.hypot({}); // NaN

Math.clz32(0); // 32
Math.clz32(1); // 31
Math.clz32(0b01000000000100000000000000000000); // 1
Math.clz32(0.5); // 32
// 对于空值或非数值,会转化为数值再进行计算
Math.clz32("1"); // 31
Math.clz32(); // 32
Math.clz32([]); // 32
Math.clz32({}); // 32
Math.clz32(NaN); // 32
Math.clz32(Infinity); // 32
Math.clz32(-Infinity); // 32
Math.clz32(undefined); // 32
Math.clz32("hhh"); // 32

Math.trunc(12.3); // 12
Math.trunc(12); // 12

// 整数部分为 0 时也会判断符号
Math.trunc(-0.5); // -0
Math.trunc(0.5); // 0
Math.trunc("12.3"); // 12
// 空值或无法转化为数值时时返回 NaN
Math.trunc(); // NaN
Math.trunc(NaN); // NaN
Math.trunc("hhh"); // NaN
Math.trunc("123.2hhh"); // NaN

// 对于 2 的 24 次方取负至 2 的 24 次方之间的整数(不含两个端点),返回结果与参数本身一致
Math.fround(-(2**24)+1); // -16777215
Math.fround(2 ** 24 - 1); // 16777215

// 用于将 64 位双精度浮点数转为 32 位单精度浮点数
Math.fround(1.234) // 1.125
// 当小数的精度超过 24 个二进制位,会丢失精度
Math.fround(0.3); // 0.30000001192092896
Math.fround(NaN) // NaN
Math.fround(Infinity) // Infinity

// 参数为其他非数值类型时会将参数进行转换
Math.fround('5'); // 5
Math.fround(true); // 1
Math.fround(null); // 0
Math.fround([]); // 0
Math.fround({}); // NaN

Math.sign(1); // 1
Math.sign(-1); // -1
// 参数为 0 时,不同符号的返回不同
Math.sign(0); // 0
Math.sign(-0); // -0
// 判断前会对非数值进行转换
Math.sign('1'); // 1
Math.sign('-1'); // -1
// 参数为非数值(无法转换为数值)时返回 NaN
Math.sign(NaN); // NaN
Math.sign('hhh'); // NaN

Math.expm1(1); // 1.718281828459045
Math.expm1(0); // 0
Math.expm1(-1); // -0.6321205588285577
Math.expm1('0'); //0
Math.expm1(NaN); // NaN

Math.log1p(1); // 0.6931471805599453
Math.log1p(0); // 0//计算1的自然对数
Math.log1p(-1); // -Infinity
Math.log1p(-2); // NaN

Math.log10(1); // 0
// 计算前对非数值进行转换
Math.log10('1'); // 0
// 参数为 0 时返回 -Infinity
Math.log10(0); // -Infinity
// 参数小于 0 或参数不为数值(且无法转换为数值)时返回 NaN
Math.log10(-1); // NaN

Math.log2(1); // 0
// 计算前对非数值进行转换
Math.log2('1'); // 0
// 参数为 0 时返回 -Infinity
Math.log2(0); // -Infinity
// 参数小于 0 或参数不为数值(且无法转换为数值)时返回 NaN
Math.log2(-1); // NaN

1 ** 2; // 1
// 右结合,从右至左计算
2 ** 2 ** 3; // 256
// **=
let exam = 2;
exam \*\* = 2; // 4

http://www.jnnr.cn/a/409254.html

相关文章

基于Bert的知识库智能问答系统

项目完整地址&#xff1a; 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式&#xff0c;通常用于支持智能问答系统。在一个知识库中&#xff0c;每个句子通常来说…

learn_C_deep_3 (最名不符实的关键字 - static、static关键字总结、基本数据类型、最冤枉的关键字 - sizeof)

目录 最名不符实的关键字 - static stati修饰全局变量和函数 static修饰局部变量 static关键字总结 几个问题 1.c语言要设置全局变量和函数可以跨文件使用的原因 2.C程序地址空间是什么样的&#xff1f; 3.局部变量为什么具有临时性 4.全局变量为什么具有全局性 5.为…

[ Java SE] 对象的比较

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

C++中文件操作与文件流

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

C#如何解决项目打开问题 error : 找不到指定的 SDK“Microsoft.NET.Sdk.WindowsDesktop”

错误提示&#xff0c;问题描述 后来发现&#xff0c;直接安装rider还是不能解决解决&#xff08;会自动配置关联&#xff08;path等&#xff09;&#xff0c;甚至自动下载的&#xff0c;官方的visual studio反而不会&#xff0c;之后再详细看怎么弄了&#xff09; VS2022项目…

坚持60s(jar反编译)

下载附件打开&#xff0c;是一个.jar文件 好像是一个小游戏&#xff0c;但是我没明白怎么操作&#xff0c;我只知道它在侮辱我 .jar文件是java中的class文件打包而成的&#xff0c;相当于类库。 在打开.jar文件之前&#xff0c;要确保电脑里面安装好了java JDK(java 的开发环…

低代码开发重要工具:私有化部署的jvs-logic的设计与价值

逻辑引擎介绍 逻辑引擎是一种能够处理逻辑表达式的程序&#xff0c;它能够根据用户输入的表达式计算出表达式的值。在实际应用中&#xff0c;逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域&#xff0c;具有广泛的应用前景。 逻辑引擎如下图所示&#xff0c;在…

Measuement Comuputing 公司USB-1608GX设备EPICS驱动的安装和调试记录

1、USB-1608GX模块简介 USB-1608GX模块具有以下功能&#xff1a; 1&#xff09; 16位模拟输入&#xff1a; 16路单端通道或者8路差分通道。每个通道可编程的范围&#xff1a;-1V-1V&#xff0c;-2V-2V&#xff0c;-5V-5V&#xff0c;-10V-10V。500KHz总共最大输入率&#xff…

API Testing 一个基于 YAML 文件的开源接口测试工具

API Testing 一个基于 YAML 文件的开源接口测试工具&#xff0c;同时支持运行在本地、服务端。 在选择工具时&#xff0c;可以从很多方面进行考量、对比&#xff0c;以下几点是该工具的特色或者优点&#xff1a; 开源与否&#xff0c;atest 采用 MIT 开源协议&#xff0c;是最流…

Python将Excel文件内容写入Word文件

在日常办公中我们经常需要将Excel文件中的数据写入Word中&#xff0c;如果是手动一个一个进行复制粘贴&#xff0c;那将会非常的耗时且繁琐&#xff01; 遇到这种问题我们首先想到就是利用b编程解决&#xff0c;今天我分享一个excel转word的小方法&#xff01; 首先我有一个E…

说PHP不适合做爬虫的人,看这里

文章目录 一、关于PHP爬虫框架—Goutte1.1 什么是Goutte1.2 Goutte的优点1.3 Goutte的安装 二、Goutte的使用2.1 基本用法2.2 获取页面内容2.3 表单提交2.4 AJAX请求2.5 登录并抓取数据 三、15个Goutte爬虫示例3.1 简单示例3.2 获取表格内容3.3 登录并获取数据3.4 处理JavaScri…

如何破除增长的未知性?火山引擎交出了答卷

4月18日&#xff0c;由火山引擎主办的2023春季火山引擎“FORCE原动力”大会在上海召开。本次大会主要围绕云计算和数字化领域&#xff0c;全方位地展示火山引擎在云技术、云服务和云场景方面的最新探索、应用与实践&#xff0c;呈现创新发展的战略蓝图。 曾经&#xff0c;增长是…

2021遥感应用组二等奖:基于多源遥感数据的武夷山毛竹林提取研究及扩张特征分析

作品介绍 一、应用背景 近年研究表明&#xff0c;竹林固碳能力高&#xff0c;在维护全球碳平衡和应对气候变化等方面具有重要的作用。中国是竹资源最丰富的国家之一&#xff0c;在世界竹子研究领域处于领先地位。毛竹是中国本土竹类中分布最广、面积最大、经济价值最高的优良竹…

YOLOv8 更换主干网络之 MobileNeXt

《重新思考瓶颈结构以实现高效移动网络设计》 倒置残差块成为了移动网络架构设计的主流。它通过引入学习倒置残差和使用线性瓶颈的两个设计规则,改变了经典的残差瓶颈。在本文中,我们重新思考了这种设计改变的必要性,并发现它可能会带来信息丢失和梯度混淆的风险。因此,我们…

Veritas 与星辰天合的官方一体化方案来了

11&#xff1e;2&#xff0c;XSKY星辰天合联手 Veritas 贡献企业数据管理最佳实践。 近日&#xff0c;XSKY星辰天合以“科技联盟伙伴”身份亮相 2023 Veritas Solution Day&#xff0c;并宣布与 Veritas 推出联合解决方案。双方将携手为大型企业客户带来业界领先的数据存储与保…

多线程拉取+kafka推送

多线程拉取kafka推送 1 多线程 在本次需求中&#xff0c;多线程部分我主要考虑了一个点&#xff0c;就是线程池的配置如何最优。因为数据量级比较大&#xff0c;所以这个点要着重处理&#xff0c;否则拉取的时间会非常长或者是任务失败会比较频繁&#xff1b; 因为数据的量级…

语音特征参数MFCC提取过程详解

一、MFCC概述 在语音识别&#xff08;SpeechRecognition&#xff09;和话者识别&#xff08;SpeakerRecognition&#xff09;方面&#xff0c;最常用到的语音特征就是梅尔倒谱系数&#xff08;Mel-scaleFrequency Cepstral Coefficients&#xff0c;简称MFCC&#xff09;。根据…

扬帆优配|多路资金扎堆博弈,顶级游资章盟主3天爆买21个亿

4月20日&#xff0c;中科曙光&#xff08;603019.SH&#xff09;盘中稳步拉升&#xff0c;最终收涨9.99%&#xff0c;股价一举刷出了历史新高&#xff0c;达到了54.71元/股&#xff0c;全天的成交额也高达97.43亿元。 盘后发表的龙虎榜数据显现&#xff0c;知名游资章盟主的常用…

Spring Security 01 整体架构

目录 认证 AuthenticationManager ProviderManager AuthenticationProvider Authentication SecurityContextHolder 授权 AccessDecisionManager AccessDecisionVoter RoleVoter AuthenticatedVoter Custom Voters ConfigAttribute 在SpringSecurity的架构中&…

FPGA基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PC…
最新文章