ES6 随笔 -- 各数据类型的扩展(2)-- 数值
二进制和八进制表示
二进制 0b(或 0B)表示; 八进制 0o(或 0O)表示;
这两种字符串转换成十进制数值, 使用 Number()方法;
- Number('0b111') // 7
- Number.isFinite(), Number.isNaN();
Number.isFinite()的参数如果不是数值, 一律返回 false,
Infinity
/-Infinity/NaN 都返回 false;
Number.isNaN()对不是 NaN 的参数一律返回 false;
这两个方法与传统全局方法相比没有进行数值转换, 对于非数值参数一律返回 false.
Number.parseInt(), Number.parseFloat();
与原来的全局方法行为相同, 这样做是为了减少全局方法, 逐步模块化;
Number.isInteger()
判断一个参数是否为整数, 如果数据要求精度较高, 可能会不准确;
Number.EPSILON
表示 1 与大于 1 的最小浮点数之间的差值(常量); 实际上是 JS 能够表示的最小精度;
Number.EPSILON === Math.pow(2, -52)
可以用来设置 "可以接受的误差范围".
安全整数和 Number.isSafeInteger()
JS 能够精确表示的整数范围在
Number.MIN_SAFE_INTEGER
和
Number.MAX_SAFE_INTEGER
之间; 这个范围内是 "安全的", 否则就会 "不安全", 检验方法为
- Number.isSafeInteger()
- ;
但是对于一个运算, 则要对运算数和结果都检验, 全部在安全整数范围内结果才是可信的.
Math 对象的扩展
1) Math.trunc() 去除小数部分, 保留整数部分, 相当于
- Math.trunc = Math.trunc || function(x) {
- return x <0 ? Math.ceil(x) : Math.floor(x);
- };
非数值会先转换为数值, 不能截取数值或空值, 返回 NaN;
2) Math.sign(): 确认一个参数是正数, 负数还是零; 非数值会先转换为数值; 无法转换则返回 NaN; 相当于
- Math.sign = Math.sign || function(x) {
- x = +x; // convert to a number
- if (x === 0 || isNaN(x)) {
- return x;
- }
- return x> 0 ? 1 : -1;
- };
返回值包括 + 1,-1, 0, -0, NaN;
3) Nath.cbrt(): 计算一个数的立方根; 相当于
- Math.cbrt = Math.cbrt || function(x) {
- var y = Math.pow(Math.abs(x), 1/3);
- return x < 0 ? -y : y;
- };
4) Math.clz32(), 返回一个数的 32 位无符号整数形式有多少前导零; 对空值或其他类型值会先转换为数值再计算;
5) Math.imul(), 返回两个数以 32 位带符号整数形式相乘的结果, 返回的也是一个 32 位的带符号整数; 对于那些很大的数的乘法, 低位数值往往都是不精确的, Math.imul 方法可以返回正确的低位数值.
Math.imul(0x7fffffff, 0x7fffffff) // 1
6) Math.fround(), 返回一个数的 32 位单精度浮点数形式.
7) Math.hypot(), 返回所有参数的平方和的平方根.
4 个对数方法:
8) Math.expm1(), 返回 Math.exp(x)-1;
9) Math.log1p(), 返回 1+x 的自然对数;
10) Math.log10(), 返回以
10
为底的 x 的对数, 如果 x 小于 0, 则返回 NaN;
11) Math.log2(), 返回以 2 为底的 x 的对数, 如果 x 小于 0, 则返回 NaN;
6 个双曲函数方法;
指数运算符 (**): 对于特别大的运算结果, 与 Math.pow() 结果会有细微差异; 与等号连用, 作为新的赋值符:
- a **= 2 // a = a ** 2; a = a * a;
- b **= 3 // b = b ** 3; b = b * b * b;
ES6 随笔 -- 各数据类型的扩展(2)-- 数值
来源: http://www.bubuko.com/infodetail-2648949.html