ES6之数值的扩展

news2025/1/26 15:27:49
  • 1. 数值的扩展
    • 1.1. 二进制和八进制字面量表示:
    • 1.2. 数值判断方法:
      • 1.2.1. Number.isFinite() 检查一个值是否为有限的数值。
      • 1.2.2. Number.isNaN() 更准确地检测NaN值。
      • 1.2.3. 传统的全局方法 isFinite() 和 isNaN() 的区别
    • 1.3. 数值转换方法:
    • 1.4. 整数检查与精度:
      • 1.4.1. Number.isInteger() 判断一个值是否为整数。
      • 1.4.2. Number.EPSILON 提供了一个极小的常量,用于比较浮点数时的误差容限。
      • 1.4.3. Number.isSafeInteger() 检查一个值是否为安全的整数(在 -(2^53) 到 2^53 之间)。
    • 1.5. 数值分隔符:
    • 1.6. Math对象的扩展:
      • 1.6.1. Math.trunc() 移除一个数的小数部分,返回整数部分。
      • 1.6.2. Math.sign():
      • 1.6.3. Math.cbrt():
      • 1.6.4. Math.hypot():
      • 1.6.5. 对数方法:
      • 1.6.6. Math.clz32():

1. 数值的扩展

ECMAScript 6 (ES6) 对数值的扩展引入了一些新的特性和方法,旨在提高数值处理的便利性和精确度。

以下是一些关键的扩展点及其示例:

1.1. 二进制和八进制字面量表示:

  • ES6 引入了新的字面量表示法来直接表示二进制和八进制数。
    • 二进制前缀为 0b0B
    • 八进制前缀为 0o0O
let binary = 0b1010; // 二进制表示10,十进制为10
let octal = 0o12;    // 八进制表示12,十进制为10
  • 如果要将 0b 和 0o 前缀的字符串数值转为十进制,要使用 Number 方法。
Number('0b111') // 7
Number('0o10') // 8

1.2. 数值判断方法:

1.2.1. Number.isFinite() 检查一个值是否为有限的数值。
console.log(Number.isFinite(15)); // true
console.log(Number.isFinite(Infinity)); // false

Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
1.2.2. Number.isNaN() 更准确地检测NaN值。
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("Hello")); // false

Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true
1.2.3. 传统的全局方法 isFinite() 和 isNaN() 的区别
  • 传统方法先调用 Number() 将非数值的值转为数值,再进行判断,
  • 而这两个新方法只对数值有效, Number.isFinite() 对于非数值一律返回 false , Number.isNaN() 只有对于 NaN 才返回 true ,非 NaN 一律返回 false 。
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

1.3. 数值转换方法:

  • Number.parseInt()Number.parseFloat() 作为全局函数的严格版本,直接绑定在 Number 对象上。
console.log(Number.parseInt("123px")); // 123
console.log(Number.parseFloat("123.45em")); // 123.45

这样做的目的,是逐步减少全局性方法,使得语言逐步模块化

Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true

1.4. 整数检查与精度:

1.4.1. Number.isInteger() 判断一个值是否为整数。
console.log(Number.isInteger(42)); // true
console.log(Number.isInteger(42.1)); // false

需要注意的是,在JavaScript 内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false
1.4.2. Number.EPSILON 提供了一个极小的常量,用于比较浮点数时的误差容限。

根据规格,它表示1与大于1的最小浮点数之间的差。

let num = 0.1 + 0.2;
console.log(Math.abs(num - 0.3) < Number.EPSILON); // true,判断浮点运算的误差

Number.EPSILON 实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。

引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。

Number.EPSILON 可以用来设置“能够接受的误差范围”。

比如,误差范围设为2的-50次方(即 Number.EPSILON * Math.pow(2, 2) ),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。

5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2) // true
1.4.3. Number.isSafeInteger() 检查一个值是否为安全的整数(在 -(2^53) 到 2^53 之间)。

超过这个范围,无法精确表示这个值。

Math.pow(2, 53) // 9007199254740992
9007199254740992 // 9007199254740992
9007199254740993 // 9007199254740992
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true  

上面代码中,超出2的53次方之后,一个数就不精确了。
ES6引入 了 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER 这两个
常量,用来表示这个范围的上下限。

Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1
// true
Number.MAX_SAFE_INTEGER === 9007199254740991
// true
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER
// true
Number.MIN_SAFE_INTEGER === -9007199254740991
// true

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

Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(9007199254740990) // true
Number.isSafeInteger(9007199254740992) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false

1.5. 数值分隔符:

  • 数值字面量中可以使用下划线 _ 作为视觉上的千位分隔符,提高可读性。
let million = 1_000_000; // 等同于1000000

1.6. Math对象的扩展:

ES6对Math对象进行了扩展,增加了一系列新的方法来提供更强大的数学运算功能。以下是一些主要的扩展方法及其使用示例:

1.6.1. Math.trunc() 移除一个数的小数部分,返回整数部分。
console.log(Math.trunc(3.14)); // 3

对于非数值, Math.trunc 内部使用 Number 方法将其先转为数值。

Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0

对于空值和无法截取整数的值,返回 NaN 。

Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
Math.trunc(undefined) // NaN
1.6.2. Math.sign():

用来判断一个数的符号,返回五种可能的值:1(正数)、0(零)、-1(负数)、-0(负零)、NaN(非数字)。

console.log(Math.sign(23));   // 输出: 1
console.log(Math.sign(-23));  // 输出: -1
console.log(Math.sign(0));    // 输出: 0
console.log(Math.sign(-0));   // 输出: -0
console.log(Math.sign('a'));  // 输出: NaN
1.6.3. Math.cbrt():

计算一个数的立方根。

console.log(Math.cbrt(27)); // 输出: 3
1.6.4. Math.hypot():

返回所有参数的平方和的平方根,常用于计算直角三角形的斜边长度。

console.log(Math.hypot(3, 4)); // 输出: 5
1.6.5. 对数方法:
  • Math.expm1(x) 返回 e^x - 1
  • Math.log1p(x) 返回 1 + x 的自然对数。
  • Math.log10(x) 返回以10为底x的对数。
  • Math.log2(x) 返回以2为底x的对数。
console.log(Math.expm1(1));  // 输出:约等于 1.71828
console.log(Math.log1p(1));  // 输出: 0.6931471805599453
console.log(Math.log10(100)); // 输出: 2
console.log(Math.log2(8));    // 输出: 3
1.6.6. Math.clz32():

返回一个数的32位无符号整数形式的前导零的个数。

console.log(Math.clz32(0b00000000000000000000000000001010)); // 输出: 26

这些方法丰富了JavaScript的数学运算能力,使得处理数学问题更加高效和便捷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDP多对多组播通信

广播和多播仅应用于UDP。TCP是一个面向连接的协议&#xff0c;TCP一定是点对点的&#xff0c;一点是两个主机来建立连接的&#xff0c;TCP肯定是单播。只有UDP才会使用广播和组播。 如下示例实现一个UDP多对多的组播通信&#xff0c;进程中有收、发两个线程&#xff0c;分别表…

数字水印 | 奇异值分解 SVD 的定义、原理及性质

目录 1 为什么使用 SVD&#xff1f;2 SVD 的定义是什么&#xff1f;2.1 特征值分解2.2 奇异值分解 3 如何求解奇异值 SV&#xff1f;3.1 求解过程3.2 证明过程 4 什么是 SVD 的性质&#xff1f; 参考博客&#xff1a; Python 机器学习笔记&#xff1a;奇异值分解&…

Java入门基础学习笔记23——For循环结构

1、for循环&#xff1a; 控制一段代码反复执行很多次。 2、For循环语句的基本结构&#xff1a; for(初始化表达式&#xff1b;判断表达式&#xff1b;递增&#xff08;递减&#xff09;表达式&#xff09; {循环体语句&#xff08;重复执行的代码&#xff09; } 例&#xff1…

积温空间分布数据、气温分布数据、日照数据、降雨量分布、太阳辐射数据、地表径流数据、土地利用数据、npp数据、ndvi数据

引言 积温是某一时段内逐日平均气温之和,它是研究植物生长、发育对热量的要求和评价热量资源的一种指标,是影响植物生长的重要因素之一&#xff0c;对指导农业生产和生态建设具有非常重要的意义。作为重要的气候资源&#xff0c;积温与其它资源的区别在于存在很大的地域差异和时…

【再探】设计模式—桥接模式、组合模式及享元模式

结构型设计模式描述了对象与类之间的关系。适配器模式及装饰器模式主要用于接口适配及功能增强&#xff0c;而桥接模式模式则是为了减少类的数量&#xff0c;组合模式让部分与容器能被客户端统一对待处理&#xff0c;享元模式则是用于节约系统内存&#xff0c;提高系统性能。 …

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息-单体消息 可以无限创建聊天室&#xff0c;可以把单个聊天室链接拿出来单独使用&#xff0c;消息秒级响应&#xff0c;支持设置屏蔽词。 具体仔细看视频演示&#xff0c;不提供演示&#xff0c;因为青狐资源网会员用户太…

第25次修改留言板,修改了布局,样式和脚本分离

伤心城市 首页 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"beiwanglu" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" type&qu…

每周题解:牛的旅行

题目描述 牛的旅行 农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径 ( 注意&#xff0c;恰好一条 )。对这条路径有这样的…

宁静致远(“静”)

宁静致远是一个成语&#xff0c;读音为nng jng zh yuǎn&#xff0c;意思是只有心境平稳沉着、专心致志&#xff0c;才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》&#xff0c;蜀汉丞相诸葛亮的…

​学者观察 | 从区块链应用创新看长安链发展——CCF区块链专委会荣誉主任斯雪明

导语 2024年1月27日&#xff0c;斯雪明教授在长安链发布三周年庆暨生态年会上发表演讲&#xff0c;认为在区块链发展过程中&#xff0c;不仅需要技术创新&#xff0c;同时需要有价值、有特色、有示范意义的应用创新。斯雪明教授介绍了国内区块链技术与应用发展的现状、趋势与挑…

C++ I/O流(一)——输出流

一、IO流概念 IO流可分为输入流和输出流,用于从设备(如键盘、文件、网络等)读取数据或向设备写入数据。C++标准库提供了丰富的IO流类,包括iostream、fstream、stringstream等,分别用于处理控制台输入输出、文件输入输出和字符串流操作。 读操作:输入流中读取数据到程序中…

CTFshow 爆破

第一题0 抓包发现输入账号密码后数据包会多一个base64编码 所有推出用户密码在传输的时候进行了加密 所以爆破时也用base64加密 设置paylod 用题目给的字典 在添加两条规则 第一个是增加前缀 admin: 第二个是使得payload进行base64编码 取消URL编码字符 因为会把号编码了 开…

C# .Net8 switch 的用法

在 .net 8中&#xff0c;switch 不需要再和传统的写法一样了&#xff0c;会更加的方便 创建一个 .net 8 控制台项目 switch 的写法没必要和以前一样 namespace SwitchTest {internal class Program{static void Main(string[] args){int day 3;var week day switch{1 > &…

SAP_ABAP-思考篇

作为一个SAP十年左右的从业者&#xff0c;其实我很清楚&#xff0c;我自身的能力&#xff0c;确实是很多东西都会一点&#xff0c;但是没有一样是精通的。坦白来说&#xff0c;我的个人简介里&#xff0c;虽然也不算夸大&#xff0c;但我估计有些新手小白看着可能会觉得还挺厉害…

21【Aseprite 作图】画白菜

1 对着参考图画轮廓 2 缩小尺寸 变成这样 3 本来是红色的描边&#xff0c;可以通过油漆桶工具&#xff08;取消 “连续”&#xff09;&#xff0c;就把红色的轮廓线&#xff0c;变成黑色的 同时用吸管工具&#xff0c;吸取绿色和白色&#xff0c;用油漆桶填充颜色 4 加上阴影…

论文阅读-《MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation》

目录 1 摘要 2 介绍 3 相关工作 3.1 3D HPE 3.2 ViT 3.3 多假设方法 4 MHFormer 4.1 概述 4.2 准备阶段 4.2.1 多头自注意力机制&#xff08;MSA&#xff09; 4.2.2 多层感知器&#xff08;MLP&#xff09; 4.3 MHG-多假设生成 4.3.1 概述 4.3.2 详细解释&#x…

基于Vue和uni-app的增强型多选框Checkbox组件开发

基于Vue和uni-app的增强型多选框&#xff08;Checkbox&#xff09;组件开发 摘要 随着前端技术的不断发展和用户体验要求的提升&#xff0c;传统的Checkbox组件已不能满足所有需求。本文介绍了一种基于Vue和uni-app的增强型多选框&#xff08;Checkbox&#xff09;组件的开发…

一文了解人工智能AI、大模型、AI大模型、ChatGPT、GPT-4、OpenAI、Claude 3...

AI是什么&#xff1f; 首先&#xff0c;AI是什么&#xff1f; 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。 是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 简单来说就是模拟人类行为…

Linux文件系统详解

&#x1f30e;Linux文件系统 文章目录&#xff1a; Linux文件系统 简单认识磁盘 文件系统       磁盘线性结构抽象       文件系统存储方法 inode Table         inode Bitmap         Data Block         Block Bitmap         …

Python 全栈体系【四阶】(四十五)

第五章 深度学习 十、生成对抗网络&#xff08;GAN&#xff09; 1. 图像生成技术概述 1.1 什么是图像生成技术 图像生成技术是指利用机器学习或深度学习等人工智能技术&#xff0c;通过训练模型来生成逼真的图像。这些技术可以根据给定的输入&#xff0c;生成与真实图像相似…