Number

coderljw 2024-10-13 JS 基础
  • JS 基础
  • Number
大约 3 分钟

# 1. Number(any)

  • 构造函数创建数字。
Number(7) // => 7
Number({}) // => NaN
1
2

# 2. toFixed(number)

  • 舍入与浮点数相关,返回字符串。

  • 各浏览器间可能存在差异,非完全的银行家舍入法。

3.355.toFixed(2) // => '3.35'
3.455.toFixed(2) // => '3.46'
3.3551.toFixed(2) // => '3.36'

-3.355.toFixed(2) // => -3.35 由于操作符优先级,(-)后返回数字
(-3.355).toFixed(2) // => '-3.35'

// 四舍五入保留小数
function $toFixed (val, exp) {
  return val !== void 0
    ? +(Math.round(val * Math.pow(10, exp)) / Math.pow(10, exp)).toFixed(exp)
    : +(0).toFixed(exp)
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3. isNaN(any)

  • 判断是否为 NaN 类型,非数字类型会先转换为数字后再判断。
isNaN(NaN) // => true
isNaN(0 / 0) // => true
isNaN('') // => false
isNaN('clearlove7') // => true
isNaN(null) // => false
isNaN(undefined) // => true
isNaN([]) // => false
isNaN(['clearlove7']) // => true
isNaN({}) // => true

// 0 除以 0 会返回 NaN,其他数除以 0 均不会返回 NaN
0 / 0 // => NaN
7 / 0 // => Infinity
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4. Number.isNaN(any)

  • 只有 NaN 时判断为 true,非数字类型不会进行转换后再判断。
Number.isNaN(NaN) // => true
Number.isNaN(0 / 0) // => true
Number.isNaN('') // => false
Number.isNaN('clearlove7') // => false
Number.isNaN(null) // => false
Number.isNaN(undefined) // => false
Number.isNaN([]) // => false
Number.isNaN(['clearlove7']) // => false
Number.isNaN({}) // => false
1
2
3
4
5
6
7
8
9

# 5. isFinite(any)

  • 判断是否为有限数值,只有 NaNInfinity-Infinity 判断为 false,非数字类型会先转换为数字后再判断。
isFinite(NaN) // => false
isFinite(Infinity) // => false
isFinite(-Infinity) // => false
isFinite(0 / 0) // => false
isFinite('') // => true
isFinite('clearlove7') // => false
isFinite(null) // => true
isFinite(undefined) // => false
isFinite([]) // => true
isFinite(['clearlove7']) // => false
isFinite({}) // => false
1
2
3
4
5
6
7
8
9
10
11

# 6. parseInt(string, radix)

  • 第二个参数 radix 是 2-36 之间的整数,表示被解析字符串的基数,超出基数范围返回 NaN。

  • 转换为整型(截除小数部分),转换失败返回 NaN。若是以数字开头的字符串,截取到非数字前面,或截取到第二个小数点前面。

parseInt(4.396) // => 4
parseInt('7.77') // => 7
parseInt('43.9.6jack') // => 43
parseInt('jack') // => NaN

// 其他进制转换为 10 进制
parseInt(1100001001, 2) // => 777
// 将 'D' 按 16 进制转换
parseInt('D', 16) // => 13
// 因 'J' 大于 16 进制位数(F),转换失败
parseInt('J', 16) // => NaN
// 经典面试题
[10, 10, 10, 10, 10].map(parseInt) // => [10, NaN, 2, 3, 4]

// 来自《你不知道的 JS(中)》示例
parseInt(1 / 0, 19) // => 18

parseInt(0.000008) // => 0 ('0'来自于'0.000008')
parseInt(0.0000008) // => 8 ('8'来自于'8e-7')
parseInt(false, 16) // => 250 ('fa'来自于'false')
parseInt(parseInt, 16) // => 15 ('f'来自于'function..')

parseInt('0x10') // => 16
parseInt('103', 2) // => 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 7. parseFloat(string)

  • 转换为浮点型,转换失败返回 NaN。若是以数字开头的字符串,截取到非数字前面,或截取到第二个小数点前面。
parseFloat(43.96) // => 43.96
parseFloat('7.77') // => 7.77
parseFloat('43.9.6jack') // => 43.9
parseFloat('love') // => NaN
1
2
3
4

# 8. Number.isInteger(any)

  • 判断给定的参数是否为整数。
Number.isInteger(7) // => true
Number.isInteger(7.7) // => false
Number.isInteger(NaN) // => false
Number.isInteger(null) // => false
Number.isInteger(true) // => false
Number.isInteger(Infinity) // => false
1
2
3
4
5
6

# 9. Number.isFinite(any)

  • 判断给定的参数是否为有穷数。
Number.isFinite(7.7) // => true
Number.isFinite(1 / 0) // => false
Number.isFinite(NaN) // => false
Number.isFinite(null) // => false
Number.isFinite(true) // => false
Number.isFinite(Infinity) // => false
1
2
3
4
5
6

# 10. Number.MAX_SAFE_INTEGER && Number.MIN_SAFE_INTEGER

  • IEEE754 规定,在计算机内部保存有效数字时,默认尾数第一位隐含为 1,可以舍去第一位,读取时再加上,所以 52 位有效数字实际可以存储 53 位。

  • 2532^{53} 是可以正确表示的最大整数,但因 2532^{53}253+12^{53} + 1 表示一样(尾数均有53位,IEEE754 有效位为 52 位,所以要舍去最后一位,舍去后表示就一样了),所以 2532^{53} 是不安全的。

Number.MAX_SAFE_INTEGER === 2 ** 53 - 1 // => true
Number.MIN_SAFE_INTEGER === -(2 ** 53 - 1) // => true

Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 // => true
Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2 // => true
1
2
3
4
5

# 11. Number.isSafeInteger(any)

  • 判断传入的参数是否为安全整数。
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // => true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // => false
1
2

# 12. toString(radix)

  • 默认转换为 10 进制字符串,只有数字有进制转换表示。

  • radix 是 2-36 之间的整数,表示被转换字符串的基数,超出基数范围将报错。

777..toString(2) // => '1100001001'
'777'.toString(2) // => '777'
1
2
以父之名
周杰伦.mp3