Number
coderljw 2024-10-13 大约 3 分钟
# 1. Number(any)
- 构造函数创建数字。
Number(7) // => 7
Number({}) // => NaN
1
2
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
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
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
2
3
4
5
6
7
8
9
# 5. isFinite(any)
- 判断是否为有限数值,只有
NaN
、Infinity
、-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
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
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
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
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
2
3
4
5
6
# 10. Number.MAX_SAFE_INTEGER && Number.MIN_SAFE_INTEGER
IEEE754 规定,在计算机内部保存有效数字时,默认尾数第一位隐含为 1,可以舍去第一位,读取时再加上,所以 52 位有效数字实际可以存储 53 位。
是可以正确表示的最大整数,但因 与 表示一样(尾数均有53位,IEEE754 有效位为 52 位,所以要舍去最后一位,舍去后表示就一样了),所以 是不安全的。
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
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
2
# 12. toString(radix)
默认转换为 10 进制字符串,只有数字有进制转换表示。
radix 是 2-36 之间的整数,表示被转换字符串的基数,超出基数范围将报错。
777..toString(2) // => '1100001001'
'777'.toString(2) // => '777'
1
2
2