ES6学习之<数值扩展>

数值扩展

// 二进制和八进制表示法
// ES6提供了二进制(0b或0B)和八进制(0o或0O)的新写法
0b110 === 6		// true
0o777 === 511 // true

// Number.isFinite()检查一个数值是否为有限的, Infinity/-Infinity以及非数值类型均返回false
Number.isFinite('1'/'1')		// true
Number.isFinite(-Infinity)	// false
Number.isFinite('15')				// false
Number.isFinite(true)				// false
// Number.isNaN()检查一个值是否为NaN
Number.isNaN(1/0)							// false, Infinity
Number.isNaN(9/NaN) 					// true
Number.isNaN('true'/0)				// true
Number.isNaN('hello'/'world') // true
// 与传统全局变量isFinite()和isNaN()的区别
// 传统方法先进行类型转换, 再进行判断; ES6新方法Number.isFinite()和Number.isNaN()直接进行判断, '1'/'1'属于在运算过程中进行类型转换, 而ES6新方法本身是不进行类型转换的

// parseInt()和parseFloat() // ES5
// Number.parseInt()和Number.parseFloat() // ES6
// 完全一样, 目的是为了逐步减少全局方法, 使语言模块化
Number.parseInt === parseInt 		 // true
Number.parseFloat === parseFloat // true

// Number.isInteger()用来判断一个值是否为整数
Number.isInteger(0.1) // false
3 === 3.0	// true, JS内部整数和浮点数存储方法相同

// Number.EPSILON === 2.220446049250313e-16, 浮点数计算是不精确的, 如果误差小于Number.EPSILON, 则认为得到了正确结果
0.1 + 0.2 === 0.3 												 // false
Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON // true

// Number.isSafeInteger()
// JavaScript能够准确表示的整数区间是(-2^53, 2^53)不含端点, [-9007199254740991, 9007199254740991]
Number.isSafeInteger('a')		// false
Number.isSafeInteger(Number.MAX_VALUE)	// false
Number.isSafeInteger(9007199254740992)	// false
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)	// false
// 超过精度范围的数,在计算机内部不一定以它原有的值储存
Number.isSafeInteger(9007199254740993 - 10)	//false 9007199254740982
9007199254740992 === 9007199254740993  // true 9007199254740992
9007199254740999 === 9007199254741000  // true 9007199254741000
9007199254740998 === 9007199254740998  // true 9007199254740998
9007199254740996 === 9007199254740997  // true 9007199254740996

// Math对象的扩展
// Math.trunc()用于去除一个数的小数部分, 返回整数部分; 对于非数值, 使用Number方法将其先转为数值; 对于空值和无法截取整数的值, 返回NaN
Math.trunc('12.3zyy')		// NaN
Math.trunc(-0.1)				// -0
Math.trunc('123.456')		// 123

// Math.sign()用于判断一个数到底是整数、负数还是零; 对于非数值, 会先转为数值
# 参数为整数, 返回+1
# 参数为负数, 返回-1
# 参数为0, 返回0
# 参数为-0, 返回-0
# 参数为其他值, 返回NaN
Math.sign(true) 	// 1
Math.sign('zyy') 	// NaN
Math.sign(-0)			// -0

// Math.cbrt()用于计算一个数的立方根

// Math.clz32()返回一个数的32位无符号整数形式有多少个前导0; 对于小数只考虑整数部分; 对于空值或其他类型的值, 先转为其他类型的值, 再计算
Math.clz32('8.32')		// 28
Math.clz32('zyy')			// 32
Math.clz32(NaN)				// 32
Math.clz32(Infinity)	// 32
Math.clz32(null)			// 32
Math.clz32(undefined)	// 32
Math.clz32([])				// 32
Math.clz32({})				// 32

// Math.imul()返回两个数以32位带符号整数形式相乘的结果, 返回的也是一个32位带符号整数。对于很大的数的乘法, 低位数值往往是不精确的, 该方法可以返回正确的地位数值
(0x7fffffff * 0x7fffffff) | 0)		// 0
Math.imul(0x7fffffff, 0x7fffffff) // 1

// Math.fround()返回一个数的单精度浮点数形式。对于整数来说, 返回结果没有任何不同, 区别主要在于无法用64个二进制位精确表示的小数。该方法会返回最接近这个小数的单精度浮点数
Math.fround(1)			// 1
Math.fround(1.337)	// 1.3370000123977661

// Math.hypot()返回所有参数的平方和的平方根。参数不是数值则将其转为数值。只要有一个参数无法转为数值, 就会返回NaN

// ES6新增4个对数相关方法 Math.expm1() Math.log1p() Math.log10() Math.log2()

// ES6新增6个双曲函数方法 Math.sinh(x) Math.cosh(x) Math.tanh(x) Math.asinh(x) Math.acosh(x) Math.atanh(x)

// Math.signbit()判断一个数的符号位是否已经设置
# 如果参数是NaN, 返回false
# 如果参数是-0, 返回true
# 如果参数是负值, 返回true
# 其他情况返回false

// 指数运算符
2 ** 3 === 8 // true
let a = 2
a **= 3			 // 8
Math.pow(99, 99) === 99 ** 99 
// false(V8 6.0.0) 3.697296376497263e+197 3.697296376497268e+197
// true(V8 8.8.278.17) 3.697296376497268e+197 3.697296376497268e+197
// true(Node) 3.697296376497268e+197 3.697296376497268e+197

// BigInt(Integer)类型, 只用来表示整数, 没有位数限制, 二进制、八进制、十六进制在原有基础上末尾加n
1n + 2n 			// 3n
0b1101n 			// 13n
BigInt(123) 	// 123n
BigInt(true)  // 1n
BigInt('123')	// error
BigInt(undefined) // error
BigInt('123n')		// error
// BigInt运算, 几乎所有Number运算符都可以用, 除了两个: 不带符号的右移运算符(>>>)和一元求正运算符(+)
1n >> 1n 			// 0n
1n >>> 1n 		// error
+1n						// error
// BigInt类型不能与Number类型进行混合运算
1n >> 1				// error
1n + 1				// error
// 理论: 相等运算符(==)会改变数据类型; 实测: 不会报错
0n == 0  // true
// 精确相等运算符(===)不会改变数据类型
0n === 0 // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值