显示类型转换
⭐️ Number() 把值转为数字
- 如果参数无法被转为数字,则返回
NaN
''
、' '
, '0'
、false
、null
、[]
、 等返回 0
{}
、undefined
、NaN
被转为 NaN
- 如果字符串中的数字不纯(带有除数字外的字符),就返回
NaN
- 特点:
- 相比
parseInt
更宽松,false
, true
能转
- 但类似
'1a'
, 'true'
这种字符串,会 NaN
var a = '123';
console.log(typeof(Number(a)) + '-' + Number(a)); // number-123
a = '3.14';
console.log(typeof(Number(a)) + '-' + Number(a)); // number-3.14
a = 'true';
console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
// 说明: 非数
a = 'a';
console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
// 说明: 非数
a = '1a';
console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
// 说明: 非数
Number("0"); // 0
Number(""); // 0
Number(" "); // 0
Number(null); // 0
Number(false); // 0
Number([]); // 0
Number("\\n"); // 0
Number("\\t"); // 0
Number(true); // 1
Number('true'); // NaN
Number(undefined); // NaN
Number({}); // NaN
Number("x"); // NaN
⭐️ parseInt 把值转为一个整数
- string 要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用
ToString
抽象操作)。字符串开头的空白符将会被忽略。
- radix 从
2
到 36
,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。
- 当 radix 不填写时默认当做十进制处理,但注意 10 并不是默认值,当字符串以 0x 开头是会直接处理为16进制
parseInt("123", 16) === parseInt("0x123") // output: 291
true
、false
、''
、null
、undefined
、NaN
、[]
、{}
都转为 NaN
- 如果数字和字符串混合
- 字符串在前,转为 NaN
- 数字在前,取数字,直到不是数字为止
- 特点:
- 只管把数字转为整型,非数都是 NaN
- 相比 Number,更严格,false, true 都会 NaN
- 但 '1a' 这种却能处理,变成 1(也就是解析到不能解析为止)
- '0011' 也能处理,变成 11(省略开头的所有0)
- 带小数的,直接把小数点扔掉
var a = '123';
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-123
a = true;
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-NaN
// 说明: 只管把数字转为整型,非数都是 NaN
a = null;
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-NaN
// 说明: 同上
a = undefined;
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-NaN
a = NaN;
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-NaN
a = '3.14'
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-3
// 说明: 直接把小数点扔掉
a = 'abc123';
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-NaN
// 说明: 非数
a = '123abc';
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-123
// 说明: 如果数字和字符串混合,字符串在前,转为非数;数字在前,转到下一个不是数字为止的数字
a = '123.22abc';
console.log(typeof(parseInt(a)) + '-' + parseInt(a)); // number-123
a = '23.927'
// parseInt(a) → 23
var a = '10';
console.log(parseInt(a, 16)); // 16
// 说明: 第二个参数是基底,把xx进制的a转为10进制 xx范围 2~36
// 16 进制的 10 转 十进制 => 1*16^1 + 0*16^0 = 16 + 0 = 16
var a = 'b';
console.log(parseInt(a, 16));
// 说明: 0123456789abcdef
// 第 0 位:b * 16 ^ 0 = 11 * 1 = 11
parseInt('123', 5); // 把 '123' 看做5进制的数,返回十进制的数38
// => 1 * 5 ^ 2 + 2 * 5 ^ 1 + 3 * 5 ^ 0 = 25+10+3 = 38