# Number 和 parseInt
的区别
Number()
和parseInt()
通常用于将字符串转换为数字。
前者是转换参数的类型,后者更多在于解析字符串。
# 0、Number
Number
值表示像 37
或 -9.25
这样的浮点数值。
当作为一个函数使用时,Number(value)
函数将类型转换成数字类型,如果参数无法被转换为数字,则返回 NaN。
Returns a Number value (not a Number object) computed by ToNumber (opens new window)(value) if value was supplied, else returns +0.
关于这个toNumber,可以直接看一个对应的表
参数类型 | 返回值 |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | The result is 1 if the argument is true. The result is +0 if the argument is false. |
Number | 返回与之相等的值 |
String | 比较复杂看下面的例子。 |
Object | Apply the following steps:Let primValue be ToPrimitive (opens new window)(input argument, hint Number).Return ToNumber(primValue).调用 对象的toPrimitive,获取原始值, 再用原始值调用toNumber |
console.log(Number()) // +0
console.log(Number(undefined)) // NaN
console.log(Number(null)) // +0
console.log(Number(false)) // +0
console.log(Number(true)) // 1
console.log(Number("123")) // 123
console.log(Number("-123")) // -123
console.log(Number("1.2")) // 1.2
console.log(Number("000123")) // 123
console.log(Number("-000123")) // -123
console.log(Number("0x11")) // 17
console.log(Number("")) // 0
console.log(Number(" ")) // 0
console.log(Number("123 123")) // NaN
console.log(Number("foo")) // NaN
console.log(Number("100a")) // NaN
如果通过 Number 转换函数传入一个字符串,它会试图将其转换成一个整数或浮点数,而且会忽略所有前导的 0,如果有一个字符不是数字,结果都会返回 NaN,鉴于这种严格的判断,我们一般还会使用更加灵活的 parseInt 和 parseFloat 进行转换。
当作为构造函数使用时;
const num = new Number(14)
typeof num; // object
num === 14; // false
num == 14; // true
num.valueOf(); // 14
# 1、parseInt
# 2、区别
Number()
转换类型, 而parseInt()
转换输入值。parseInt()
第二个参数可以传入进制,而Number()
不行
parseInt('32px'); // 32
Number('32px'); // NaN
parseInt('5e1'); // 5
Number('5e1'); // 30
parseInt
是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。而Number
尝试转换整个字符串。
# 3、特殊值转换
parseInt(); /* NaN */ Number()); // 0
parseInt(''); /* NaN */ Number('')); // 0
parseInt(null); /* NaN */ Number(null)); // 0
parseInt(true); /* NaN */ Number(true)); // 1
parseInt(false) /* NaN */ Number(false)); // 0
parseInt(undefined) /* NaN */ Number(undefined));// NaN