你可能会错过的ES6数字和数学功能

更新日期: 2020-06-17阅读: 2.6k标签: 数字

ES6引入了各种数学和数字方法以及属性。在本文中,我们将介绍一些我们可能错过的有用的 Number 和 Math 属性。


新 Number 属性

Number 对象具有我们可以使用的新属性和方法。

Number.EPSILON

Number.EPSILON 属性用于比较浮点数是否在四舍五入误差的公差值内。它是一个只读属性。

它表示1与大于1的最小浮点数之间的差。

例如,我们可以编写以下代码来使用它:

const result = Math.abs(0.3 - 0.4 + 0.1);
console.log(result); // 2.7755575615628914e-17
console.log(result < Number.EPSILON); // true

0.3 - 0.4 + 0.1 应该为 0 ,但是由于JavaScript对浮点值的处理,结果为 2.7755575615628914e-17。

使用 Number.EPSILON,我们可以检查 result 是否是如此之小,以至于像在最后一行中那样接近0。

Number.isInteger(num)

Number.isInteger 检查给定的 num 是否为整数。例如,我们可以按以下方式使用它:

Number.isInteger(2.05); // false
Number.isInteger(2); // true

Number.isSafeInteger(number)

还有 isSafeInteger 方法来检查JavaScript整数是否在JavaScript可以接受的范围内。该范围由Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER 的值表示。

Number.MIN_SAFE_INTEGER 为-9007199254740991,Number.MAX_SAFE_INTEGER 为9007199254740991。

Number.isNaN(num)

Number.isNaN 检查 num 是否为NaN。与全局 isNaN() 函数不同,此方法不将其参数强制为数字。因此,对于非数字使用它是安全的。

例如,isNaN('abc') 返回 true,而 Number.isNaN('abc') 返回 false。因此,它实际上是在检查 num 是否真的是 NaN,而不是将值强制为一个数字,并检查强制值是否是 NaN。

Number.parseInt(num, radix)

Number.parseInt 与全局 parseInt 函数具有相同的作用。它使用要转换的数字字符串和基数(即数字将被转换为基数的基数)作为第二个参数。

例如,我们可以编写以下代码来做到这一点:

Number.parseInt('11', 8); // 9

上面的代码返回9,因为我们通过将8作为第二个参数传入来假设字符串是八进制数。

Number.parseInt 对八进制或二进制数字文字没有特殊支持。例如:

Number.parseInt('0o11', 8); // 0

但是,它确实支持将十六进制文字转换为数字。例如,Number.parseInt('0xF') 返回15。因此它知道我们传入的是十六进制数字。


新 Math 方法

Math 对象具有用于数字,三角和按位运算的新方法。

Math.sign(num)

sign方法返回数字的符号。如果我们有一个负数,则返回-1,如果数字为0,则返回0。否则,返回1。

例如,Math.sign(-2) 返回-1,Math.sign(0) 返回0,Math.sign(6) 返回1。

Math.trunc(num)

Math.trunc 删除数字的小数部分并返回它。

例如,Math.trunc(2.1) 返回2,Math.trunc(-2.1) 返回-2,Math.trunc(2.9) 返回2。

Math.log10(num)

log10 方法计算 num 的以10为底的对数。例如,Math.log10(1000) 是3。

Math.hypot(x, y)

hypot 计算三角形的下折线的长度,给定横边和竖边的长度分别为 x 和 y。

例如,Math.hypot(4, 3) 是5。



新整数字面量

ES6增加了对二进制和八进制文字的支持。要写一个二进制数字,我们给数字加上 0b 前缀,然后写二进制数字。

例如,我们可以把二进制值3写成 0b11。

八进制数字以 0o 为前缀。例如,0o11 是9。

toString 方法需要一个 radix 参数,它可以将一个数字转换为我们想要的基数并返回为字符串。

例如 (9).toString(8) 是11。


总结

ES6为 Number 和 Math 对象引入了许多属性和方法。此外,我们还有新型的数字面量。现在支持二进制和八进制数。

此外,Number 对象现在具有 parseInt 和 isInteger 方法。我们还可以使用 Number.EPLISON 属性检查某个值是否足够接近0,这是一个非常小的数字。

Number 还具有 isNaN 和 isSafeInteger 方法来检查 NaN 而不进行转换,还有 isSafeInteger 方法来检查整数是否在JavaScript可以接受的范围内。

Math方法包括使用 sign 方法获取数字的符号,使用 trunc 截断数字以及使用 log10 获取以10为底的对数。


来源:https://levelup.gitconnected.com,作者:John Au-Yeung,翻译:公众号《前端全栈开发者》


链接: https://www.fly63.com/article/detial/9309

Js对数字类型的支持

由于 JavaScript 采用 IEEE 754 标准,数值存储为64位双精度格式,数值精度最多可以达到 53 个二进制位(1 个隐藏位与 52 个有效位)。如果数值的精度超过这个限度,第54位及后面的位就会被丢弃.

JS实现数字金额转大写金额

由于js的弱精度,在计算小数相加时总是会丢失精度,JS将金额数字转大写的方法封装,数字大写对照表;下面为大家整理些常用的实现方法。

JS判断值是否是数字

isNaN()的缺点就在于 null、空格以及空串会被按照0来处理;对于空数组和只有一个数值成员的数组,isNaN返回false。校验只要是数字(包含正负整数,0以及正负浮点数)就返回true

Js浮点型数字误差引发的问题

JavaScript 中浮点型精度的误差,是非常基础但是却又经常不被重视的问题。文中分享的方案,足以覆盖项目中的所有情况,但如果用在其它地方或项目中,在一些极端情况下可能会有问题。

vue限制文本框输入数字的正确姿势

最近遇到一个需求,需要限制文本框输入数字,而number类型的输入框有箭头,个人不是很喜欢,因此想要寻求其它途径实现。本想通过网上找个现成的插件,然而百度,谷歌一番都没有找到满意的答案,至于随手一搜出来的方案或多或少都有点缺陷。因此自己动手,丰衣足食。

JS数字精度

最近在看计算机组成原理的浮点数部分,突然想起之前看过的一道快手面试题,为什么JS中0.1+0.2不等于0.3,应该如何解决?这里我们可以借这道题来说一下JS的精度问题

Js中的无穷数(Infinity)

Infinity(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道 Infinity, 我们在一些运算操作遇到时,就会觉得很有意思。现在我们来看看 JS 中的Infinity 属性,了解用例并解决一些常见的陷阱。

Js将负数转换为正数?

这是一种通用方法,我们首先检查数字是已经是正数还是负数,如果数字是负数,那么我们将数字乘以-1以使其为正数。使用Math.abs()方法将负数转换为正数。

Js如何从字符串中提取数字?

如果想要将一个字符串中的数字给提取出来,这要怎么做? 在JavaScript中可以使用match()方法将字符串中的数字提取到数字数组中。此方法将正则表达式作为参数,并从字符串中提取数字。使用match()方法提取数字分两种情况:

javascript如何判断值是否是数字?

javascript如何判断一个值是否是数字?下面本篇文章就来给大家介绍一下使用javascript判断一个值是否是数字的方法,sNaN() 函数用于检查其参数是否是非数字值。如果 值x 是特殊的非数字值 NaN

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!