乐趣区

三ES6数值扩展

一、Number 内置对象上添加和修改方法

1、将 parseInt(), parseFloat() §移植到 Number 上,原理一样;

// 减少全局性方法
// ES5 的写法
console.log(parseInt('2.34') ) // 2
// ES6 的写法
console.log(Number.parseInt('2.34') )// 2
console.log(Number.parseInt === parseInt)   //true
console.log(Number.parseFloat === parseFloat)   //true

2、在 Number 对象上新增方法 isFinite() 和 isNaN()

与传统的全局方法 isFinite() 和 isNaN() 的区别在于,传统方法先调用 Number() 将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效(1)Number.isFinite() 用来检查一个数值是否为有限的,有限则为 true,否则为 false。如果传入的参数,类型不是数值,那么都返回 false。

console.log(isFinite('6')); // true

console.log(Number.isFinite('6')); // false
console.log(Number.isFinite(6)); // true
console.log(Number.isFinite(16.6)); // true
console.log(Number.isFinite(NaN)); // false
console.log(Number.isFinite(null)); // false
console.log(Number.isFinite({)); // false
console.log(Number.isFinite('ceshi')); // false
console.log(Number.isFinite(false)); // false

(2)Number.isNaN() 用来检查一个值是否为 NaN。如果参数类型不是 NaN,则都返回 false。

console.log(isNaN('NaN')) // true

console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN('NaN')) // false
console.log(Number.isNaN(6)) // false
console.log(Number.isNaN('16')) // false
console.log(Number.isNaN(true)) // false
console.log(Number.isNaN(null)) // false
console.log(Number.isNaN({})) // false

3、在 Number 对象上新增方法 isInteger()

用来判断一个数值是否为整数。如果小数点后为 0 或超过小数点精度都会返回 true,因此对数据精度的要求较高的,不建议使用此方法。

console.log(Number.isInteger(10)) // true
console.log(Number.isInteger(10.1)) // false
console.log(Number.isInteger(10.0)) // false
console.log(Number.isInteger(null)) // false
console.log(Number.isInteger({})) // false
console.log(Number.isInteger('ceshi')) // false
console.log(Number.isInteger(true)) // false
console.log(Number.isInteger(10.0000000000000000000000000007)) // true

二、Math 内置对象上添加方法

(1)trunc() 方法:去除一个数的小数部分,返回整数部分。对于不是数值的参数,其内部会使用 Number 方法将其先转为数值。如果转化不行则返回 NaN。

console.log(Math.trunc(6.6)) // 6
console.log(Math.trunc(6.2)) // 6
console.log(Math.trunc(-6.2)) // -6
console.log(Math.trunc(-6.6)) // -6
console.log(Math.trunc("-6.6")) // -6
console.log(Math.trunc(true)) // 1
console.log(Math.trunc(false)) // 0
console.log(Math.trunc(null)) // 0
console.log(Math.trunc()) // NaN
console.log(Math.trunc("ceshi")) // NaN
console.log(Math.trunc(NaN)) // NaN

(2)sign() 方法:判断一个数到底是正数、负数、还是零。对于不是数值的参数,其内部会使用 Number 方法将其先转为数值。正数为 +1,负数为 -1,零也会分 +-0,其他的都会返回 NaN。

console.log(Math.sign(-6)) // -1
console.log(Math.sign(6)) // +1
console.log(Math.sign('6')) // +1
console.log(Math.sign(0)) // 0
console.log(Math.sign(-0)) // -0
console.log(Math.sign('')) // 0
console.log(Math.sign(true)) // +1
console.log(Math.sign(false)) // 0
console.log(Math.sign(null)) // 0
console.log(Math.sign('ceshi')) // NaN
console.log(Math.sign({})) // NaN
console.log(Math.sign()) // NaN
console.log(Math.sign(NaN)) // NaN
console.log(Math.sign(undefined)) // NaN

(3)cbrt() 方法:计算一个数的立方根。对于不是数值的参数,其内部会使用 Number 方法将其先转为数值。如果转化不行则返回 NaN。

console.log(Math.cbrt(-8)) // -2
console.log(Math.cbrt('-8')) // -2
console.log(Math.cbrt({})) // NaN
console.log(Math.cbrt(null)) // 0
console.log(Math.cbrt('')) // 0
console.log(Math.cbrt('ceshi')) // NaN
console.log(Math.cbrt(true)) // 1
console.log(Math.cbrt(false)) // 0
console.log(Math.cbrt(NaN)) // NaN
console.log(Math.cbrt(undefined)) // NaN

三、BigInt 数据类型 (ES2020 引入)

转换规则基本与 Number() 一致,将其他类型的值转为 BigInt。必须有参数,而且参数必须可以正常转为整数值。如果是小数或其他都报错。

console.log(typeof 453n) // bigint
console.log(typeof 453n) // bigint
console.log(BigInt(453)) // 453n
console.log(BigInt("453")) // 453n
console.log(BigInt('')) // 0n
console.log(BigInt(true)) // 1n
console.log(BigInt(false)) // 0n
console.log(BigInt(null)) // SyntaxError
console.log(BigInt("453.5")) // SyntaxError
console.log(BigInt(453.5)) // SyntaxError
console.log(BigInt(NaN)) // SyntaxError

欢迎关注公众号(web 学习吧),一起学习进步:

本文使用 mdnice 排版

退出移动版