Skip to content

类型转换机制

类型转换就是将变量存储的字面量的类型转换成另一个类型,有显示转换和隐式转换两种方式。

显示转换

其实就是强制类型转换,一般有 Number、parseInt(parseFloat)、String、Boolean 等等

Number

Number 对于基本数据类型的转换严格,对于引用类型的数据会调用 Symbol.toPrimitive 方法再调用 toNumber,不过通常都是 NaN。

js
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number("asdasd")); // not a number
console.log(Number("132")); // 132
console.log(Number("13s2")); // nan
console.log(Number("")); // 0
console.log(Number(undefined)); // nan
console.log(Number(null)); // nan
console.log(Number({})); // 0
console.log(Number(Symbol("hello"))); // 报错
// ...
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number("asdasd")); // not a number
console.log(Number("132")); // 132
console.log(Number("13s2")); // nan
console.log(Number("")); // 0
console.log(Number(undefined)); // nan
console.log(Number(null)); // nan
console.log(Number({})); // 0
console.log(Number(Symbol("hello"))); // 报错
// ...

parseInt parseFloat

和 number 差不多,不过对于字符串转换来说他是逐个解析,若碰到无法解析的就停止解析返回当前解析的结果,为第一个就不是数字就返回 NaN

String

将数据强制转换成字符型,基本上都是原样输出

js
console.log(String(true)); // true
console.log(String(false)); // false
console.log(String(1n)); // 1,bigInt会被忽略n
console.log(String(100)); // 100
console.log(String(1.55)); // 1.5
console.log(String(undefined)); // 'undefined'
console.log(String(null)); // 'null'
console.log(String({})); // [obeject Type]
console.log(String(Symbol("hello"))); // Symbol(hello)
console.log(String(true)); // true
console.log(String(false)); // false
console.log(String(1n)); // 1,bigInt会被忽略n
console.log(String(100)); // 100
console.log(String(1.55)); // 1.5
console.log(String(undefined)); // 'undefined'
console.log(String(null)); // 'null'
console.log(String({})); // [obeject Type]
console.log(String(Symbol("hello"))); // Symbol(hello)

Boolean

将数据强制转换成布尔型,数字非 0true,0false,字符串空串 false,其余 true,引用数据都是 true,因为是那变量保存的地址值在转换

js
console.log(Boolean("123")); // true
console.log(Boolean("")); // false
console.log(Boolean(0)); // false
console.log(Boolean(1.55)); // true
console.log(Boolean(undefined)); // false
console.log(Boolean(null)); // false
console.log(Boolean({})); // true
console.log(Boolean(Symbol("hello"))); // true
console.log(Boolean("123")); // true
console.log(Boolean("")); // false
console.log(Boolean(0)); // false
console.log(Boolean(1.55)); // true
console.log(Boolean(undefined)); // false
console.log(Boolean(null)); // false
console.log(Boolean({})); // true
console.log(Boolean(Symbol("hello"))); // true

隐式转换

隐式转换会出现在算术运算、逻辑运算、比较运算上。

布尔型

在需要布尔值的地方,系统会自动调用 Boolean 函数来,获得判断结果。例如 if、循环条件语句、三目运算符

数值型

在双目的算术运算中,遇到非数字类型的数据会自动将其转换成数字型,(字符串加法除外),若遇到无法转换的,则结果就为 NaN

字符串

只要是字符串与任意数据作加法运算,其结果都为字符串的拼接。