资讯专栏INFORMATION COLUMN

ECMAScript6(3):数值类型扩展

Martin91 / 2197人阅读

摘要:数值类型扩展类型新增了如下特性支持二进制和八进制二进制用或开头八进制用或开头新加方法判断一个数字是否有限方法判断一个变量是否。值得注意的是如果将非数值传入这两个函数一律返回。对于无法转换为数值的参数返回符合函数。

数值类型扩展

Number 类型新增了如下特性:

支持二进制和八进制

二进制用 0b0B 开头, 八进制用 0o0O 开头:

Number("0b1101");   //13
Number("0o107");    //71

新加 Number.isFinite() 方法判断一个数字是否有限, Number.isNaN() 方法判断一个变量是否 NaN。值得注意的是, 如果将非数值传入这两个函数, 一律返回 false。

将原有的 window.parseInt()window.parseFloat() 移植到了 Number.parseInt()Number.parseFloat(), 行为保持不变。

Number.parseInt === window.parseInt;     //true
Number.parseFloat === window.parseFloat;     //true

引入 Number.isInteger() 判断一个数字是不是整数, 注意到, 3.0 也是个整数。如果将非数值传入函数, 一律返回 false。

Number.EPSILON, 一个极小的量, 用来解决浮点数计算的误差

if(0.1 + 0.2 === 0.3){
  console.log("true");
} else {
  console.log("false")
}
//以上if语句将输出 false

if(0.1 + 0.2 - 0.3 < Number.EPSILON){
  console.log("true");
} else {
  console.log("false")
}
//以上if语句将输出 true

//其实我们可以封装一下:
Object.defineProperty(Number, "isEqual", {
  value: function isEqual(a, b){
    return Math.abs(a - b) < Number.EPSILON;
  },
  writable: true,
  configurable: true,
  enumerable: false
});

Number.isEqual(0.1 + 0.2, 0.3);    //true

Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGERNumber.isSafeInteger()

js 所能表示的整数介于$-2^{53}$~$2^{53}$之间, 超过的数就会有误差, 所以:

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

我们使用Number.isSafeInteger()判断一个数是否在这个范围内, 返回 Boolean 值。如果传入非数字或非整数, 一律返回 false。这里同样注意:3.0是个整数。

Math对象扩展

对于数学运算, 这里不再一一展开了, 以下列举了 ES6 新增的17个数学函数

Math.trunc(); 直接舍去一个数的小数部分。对于无法转换为数值的参数, 返回 NaN

Math.sign(); 符合函数。传入正数返回1, 负数返回-1, 0返回0, -0返回-0, 其他值返回 NaN

Math.cbrt(); 返回一个数的立方根。对于无法转换为数值的参数, 返回 NaN

Math.clz32(); 返回一个数的32位无符号二进制的前导零个数。对于小数, 只考虑器整数部分, 对于无法转换为数值的参数, 返回 32

Math.imul(); 返回2个数有符号32位乘积的十进制, 相当于(a*b)|0, 通常和乘法计算一致, 但可防止结果溢出

Math.fround(); 返回一个数的单精度浮点形式。对于无法转换为数值的参数, 返回 NaN

Math.hypot(); 返回所以函数平方和的平方根(欧氏距离)。只要有1个无法转换为数值的参数, 返回 NaN

Math.expm1(); 即$e^x-1$

Math.log1p(); 即$ln(x+1)$, 参数小于0或不能转换为大于零的数, 返回 NaN

Math.log10(); 即$log_{10}{x}$, 参数小于0或不能转换为大于零的数, 返回 NaN

Math.log2(); 即$log_{2}{x}$, 参数小于0或不能转换为大于零的数, 返回 NaN

Math.sinh(); 返回参数的双曲正弦值

Math.cosh(); 返回参数的双曲余弦值

Math.tanh(); 返回参数的双曲正切值

Math.asinh(); 返回参数的反双曲正弦值

Math.acosh(); 返回参数的反双曲余弦值

Math.atanh(); 返回参数的反双曲正切值

指数运算符

ES7 提出指数运算符(**),已可以实现

2 ** 3 = 8;   //相当于 Math.pow(2, 3)

//支持赋值运算
let a = 2;
a **= 3;
console.log(a);    //8

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97424.html

相关文章

  • ECMAScript6 新特性——“数值扩展

    摘要:二进制和八进制表示法提供了二进制和八进制数值的新的写法,分别用前缀或和或表示。用来检查是否为有穷以及是否为这两个新方法只对数值有效,非数值一律返回。引入了和这两个常量,用来表示这个范围的上下限。因为有精度限制,超过的次方的值无法精确表示。 1 二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 console.log(0b10...

    Dean 评论0 收藏0
  • ECMAScript6 新特性——“对象的扩展

    摘要:属性的简洁表示法允许直接写入变量和函数作为对象的属性和方法。,中有返回一个数组,成员是参数对象自身的不含继承的所有可遍历属性的键名。对象的扩展运算符目前,有一个提案,将解构赋值扩展运算符引入对象。 1 属性的简洁表示法 ES6允许直接写入变量和函数作为对象的属性和方法。 写入属性 var name = value; var obj = { name }; console.log...

    Clect 评论0 收藏0
  • ECMAScript6(10):Symbol基本类型

    摘要:基本类型是一种解决命名冲突的工具。这样,就有了个基本类型和个复杂类型使用需要注意以下几点和一样不具有构造函数,不能用调用。判断对象是否某个构造函数的实例,运算符会调用它是一个数组对象属性。即,当存在时,以此为构造函数构建对象。 Symbol基本类型 Symbol 是一种解决命名冲突的工具。试想我们以前定义一个对象方法的时候总是要检查是否已存在同名变量: if(String && Str...

    lavor 评论0 收藏0
  • ECMAScript6(4):字符串类型扩展

    字符串扩展 //ES6 u{20BB7} //

    IntMain 评论0 收藏0
  • ECMAScript6学习笔记

    摘要:笔记和和是块作用域的,是声明常量用的。一个对象如果要有可被循环调用的接口,就必须在的属性上部署遍历器生成方法原型链上的对象具有该方法也可。这种方式会访问注册表,其中存储了已经存在的一系列。这种方式与通过定义的独立不同,注册表中的是共享的。 ECMAScript6 笔记 let 和 const let和const是块作用域的 ,const是声明常量用的。 {let a = 10;} a ...

    CODING 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<