持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
类型转换
转换成String
全局方法 String() 和 .toString() 可以将数字,字母,变量,表达式转换为字符串,以下使用String方法。
- null和undefined转换为String,分别是
'null'和'undefined'
String(null) //'null'
String(undefined) //'undefined'
- boolean类型,true转换成
'true',false转换成'false'
String(true) //'true'
String(false) //'false'
- Number类型直接转换,极大值或极小值或转换成指数形式的字符串
String(123) //'123'
String(10000000009999990007199254740992) //'1.000000000999999e+31'
String(0.00000000000000910000000009999990007199254740992) //'9.1000000001e-15'
- Symbol类型只能进行显式类型转换,使用隐式转换会导致出错TypeError
const sym = Symbol('desc');
console.log(sym) //Symbol(desc)
// 隐式转换
const str1 = '' + sym; // Uncaught TypeError: Cannot convert a Symbol value to a string
// 显式转换
const str2 = String(sym);
console.log(str2) //Symbol(desc)
typeof(str2) //'string'
- 对象类型转换会隐藏对象参数
[object Object]
const obj = {
name: 'pig'
}
console.log(String(obj)) // [object Object]
转换成Number
全局方法 Number() 可以将字符串、布尔值等转换为数字。
- null和undefined转换为Number,分别是
0和NaN
Number(null) //0
Number(undefined) //NaN
- boolean类型,true转换成
1,false转换成0
Number(true) //1
Number(false) //0
- String转换成Number,若数字直接转换,若包含非数字则转换成
NaN,空字符串转换成0
Number('123') //123
Number('123a') //NaN
Number('') //0
- Symbol 类型的值不能转换为数字,报错
TypeError
const sym = Symbol('desc');
const str = Number(sym);
console.log(str) //Uncaught TypeError: Cannot convert a Symbol value to a number
- 对象会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。
转换成Boolean
全局方法 Boolean() 可以将字符串、布尔值等转换为true、false。
- null和undefined转换为Boolean都是
false
Boolean(null) //false
Boolean(undefined) //false
- String转换成Boolean,若字符串为空转换成
false,反之字符串不为空转换成true
Boolean('123') //true
Boolean('123a') //true
Boolean('') //false
Boolean('false') //true
Boolean('true') //true
- Number转换成Boolean,+0、-0、NaN转换成
false,其余都是true
Boolean(+0) //false
Boolean(-0) //false
Boolean(NaN) //false
Boolean(123) //true
- Symbol 类型直接转换成
true
const sym = Symbol('desc');
const str = Boolean(sym);
console.log(str) //true
- 对象直接转换为
true。
const obj = {
name: 'pig'
}
Boolean(obj) //true
const arr = []
Boolean(arr) //true
Boolean(arr.length) //false
显式转换和隐式转换
显式转换
显式转换又称为强制转换,一般是人为进行转换,通过调用全局方法toString()、String()、Number()、parseInt()、parseFloat()、Boolean()、Object()
隐式转换
逻辑判断、if语句、算术表达式、==等会进行隐式转换
- 逻辑判断和if语句都会先转换成布尔值,在进行判断或输出结果。如果出现 false、undefined、null、NaN、''、0、-0、+0 时,都会转换成false
const str = ''
if(str) {
console.log('pig') //无法打印
}
- 算数表达式中四则运算+ - * /,除了+比较特殊,其余- * / 都是先转换成Number型再计算。 加法 (+) 如果其中一个是对象,先调用toString()后进行连接;如果其中一个是字符串,则另一个也会转换成字符串,然后进行连接;反之否则两个操作数都转换为数字(或者NaN),然后进行加法操作。
console.log({name: 'pig'} + 1) //[object Object]1
console.log([1,2,3] + 1) //1,2,31
console.log('pig' + 1) //pig1
console.log(true + 1) //2
- ==位运算符如果两边的类型不统一,则会先对两边进行类型的转换再做判断。判断流程:
- null==undefined为true,其他均为false
- 数字和字符串,字符串转换为数字
- 布尔值和其他,其他转布尔值
- 对象和其他,对象转其他
console.log(null==undefined); //true console.log(12=='12'); //true console.log(true=='1') //true console.log({name: 'pig'}==1) //false