ES6躬行记(8)——数字

简介:   ES6不仅完善了数字的八进制形式,还补充了一种十六进制形式,并且添加了全新的二进制形式。下面的三个变量分别表示八进制、十六进制和二进制的10,注释中给出了该进制的另一种写法。

一、进制


  ES6不仅完善了数字的八进制形式,还补充了一种十六进制形式,并且添加了全新的二进制形式。下面的三个变量分别表示八进制、十六进制和二进制的10,注释中给出了该进制的另一种写法。

var octal = 0o12,      //或0O12
  hex = 0xa,          //或0XA
  binary = 0b1010;     //或0B1010

  注意,只有十进制才能表示小数。


二、Number


  ES6不仅增强了Number对象处理数字的精度,还扩展了它的数字运算能力,新增的属性和方法如表2所示。


表2  Number的属性和方法

属性或方法 功能描述
EPSILON 一个常量,表示1和大于1的最小值之间的差值:2^-52
MAX_SAFE_INTEGER 一个常量,表示JavaScript的安全整数的上限值:2^53 - 1
MIN_SAFE_INTEGER 一个常量,表示JavaScript的安全整数的下限值:-(2^53 - 1)
isFinite() 判断一个数字是否是有限的,如果参数是NaN、Infinity、-Infinity或非数字,都将返回false
isNaN() 判断一个值是否是NaN,只有当参数是NaN时,才能返回true
isInteger() 判断一个数字是否为整数,注意,12和12.0都被视为整数
isSafeInteger() 判断一个数字是否为安全整数


  表中的安全整数是指处在MIN_SAFE_INTEGER和MAX_SAFE_INTEGER之间的整数。


  在全局对象中有两个全局函数也叫isFinite()和isNaN(),但它们会先将传入的参数转换成数字,再进行判断,而Number对象中的新方法却不会执行这步类型转换,因此新方法能得到更为准确的结果。下面会分别对新方法和全局函数传入相同的参数,从它们的结果可知,新方法得到了期望值,而全局函数并没有。

Number.isFinite(null);   //false
isFinite(null);          //true
Number.isNaN("abc");     //false
isNaN("abc");           //true


三、Math


  ES6为Math对象新增了6个三角函数、4个对数方法,以及多个算术方法,具体如表3所示。


表3  Math的方法

方法 功能描述
sinh()和asinh() sinh()用于双曲正弦;asinh()用于反双曲正弦
cosh()和acosh() cosh()用于双曲余弦;acosh()用于反双曲余弦
tanh()和atanh() tanh()用于双曲正切;atanh()用于反双曲正切
expm1() 等价于Math.exp(x) - 1,可计算e^x - 1,其中x表示参数
log2() 返回以2为底的对数,如果参数小于0,则返回NaN
log10() 返回以10为底的对数,如果参数小于0,则返回NaN
log1p() 等价于Math.log(x+1),返回一个数字加1后的自然对数,如果参数小于-1,则返回NaN
hypot() 先将所有参数的平方相加,再计算和的平方根
cbrt() 计算数字的立方根
clz32() 先将数字转换成32位无符号整数形式的二进制,再计算前导0的个数
trunc() 只取数字的整数部分
imul() 让两个数字的32位整数相乘
fround() 将数字转换为离它最近的单精度浮点数形式的数字
sign() 返回数字的符号,指明数字是正数、负数还是零


  clz32()方法的描述比较抽象,现在用一个例子来讲解,先将10转换成32位的二进制,得到1010(省略了前面的28个0),再调用clz32()方法,最终的结果为28。

Math.clz32(10);        //28

  sign()方法有5种返回值,分别是1、-1、0、-0和NaN,代表正数、负数、正零、负零和NaN,具体如下所示。

Math.sign(2);         //1
Math.sign(-2);        //-1
Math.sign(0);         //0
Math.sign(-0);        //-0
Math.sign(NaN);       //NaN


相关文章
|
9月前
|
前端开发
前端学习笔记202306学习笔记第三十八天-Es6-展开运算符2
前端学习笔记202306学习笔记第三十八天-Es6-展开运算符2
30 0
|
9月前
|
前端开发
前端学习笔记202306学习笔记第三十八天-Es6-展开运算符1
前端学习笔记202306学习笔记第三十八天-Es6-展开运算符1
35 0
算法练习第九天——只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
|
JavaScript 前端开发 计算机视觉
由一篇ES6-Class科普文章引发的“惨案”
让我们就开始惨案的解密过程吧。 首先,我们不按常规去思考上面的疑惑,我们需要在破案之前,需要一些准备工具。 首先让人很刺眼的一个是:Object.defineProperty。既然遇到了,我们就来会会他。
|
存储 自然语言处理 JavaScript
ES6躬行记(9)——字符串
  在介绍字符串之前,有必要先了解一点Unicode的基础知识,有助于理解ES6提供的新功能和新特性。
|
JSON 算法 JavaScript
喜大普奔,es2019登场
就在刚4个小时前,TC39将以下特性加入到了 ES2019 中。让我们来看看这些新的特性给我们带来了什么样的改变。
喜大普奔,es2019登场
ES6躬行记(12)——数组
  ES6为数组添加了多个新方法,既对它的功能进行了强化,也消除了容易产生歧义的语法。
|
JavaScript 前端开发
ES6躬行记(14)——函数
  在前面的章节中,已陆陆续续介绍了ES6为改良函数而引入的几个新特性,本章将会继续讲解ES6对函数的其余改进,包括默认参数、元属性、块级函数和箭头函数等。
ES6躬行记(10)——正则表达式
  在ES5中,如果使用构造函数RegExp()初始化RegExp对象(即正则表达式),并且它的第一个参数是正则表达式时,那么不允许再传入标志字符串(即第二个参数)。而ES6更改了这项限制,如果传入了第二个参数,那么就会取代第一个参数中的标志,如下所示。
|
JSON 算法 数据格式
ES6躬行记(11)——对象
  在第5篇中,讲解了多个对象字面量的改进,本节将重点介绍两个新增的静态方法,以及对象属性的重复处理和枚举顺序。