Javascript:数据类型转换(隐式)
数据类型的隐式转换一般是string转number,以及number转string
之所以成为隐式转换,是因为利用运算符的特性,不显式调用相关函数进行类型转换,而是通过运算表达式的形式让浏览器自动完成类型转换
让我们先来看下以下js代码运行的结果
let a = 123
let result = typeof a
console.log("typeof a = ", result)
result = a + 1
console.log("a + 1 = ", result)
result = true + 1
console.log("true + 1 = ", result)
result = true + false
console.log("true + false = ", result)
result = 2 + null
console.log("2 + null = ", result)
result = 2 + NaN
console.log("2 + NaN = ", result)
result = 2 + undefined
console.log("2 + undefined = ", result)
从打印的结果来我们应该能得出这样的规律
- 任何值在进行 + 运算时,都会将非number类型的值转换为number类型后,再进行运算
具体的类型转换情况可以看这个:Javascript:强制类型转换
但是这里并没涉及到与字符串类型值的运算
让我们尝试与字符串类型的值进行运算
// 两字符串相加 拼串操作
result = "123" + "456"
console.log("'123' + '456' = ", result)
// 任何值和字符串进行+操作,都是转为字符串然后拼串
result = "1" + 123
console.log("'1' + 123 = ", result)
result = 123 + "1"
console.log("123 + '1' = ", result)
result = true + "Hello"
console.log("true + 'Hello' = ", result)
result = null + "Hello"
console.log("null + 'Hello' = ", result)
result = NaN + "Hello"
console.log("NaN + 'Hello' = ", result)
result = undefined + "Hello"
console.log("undefined + 'Hello' = ", result)
可以看到,所有的结果最终都是字符串拼串后的结果
再次完善总结下
- 除了字符串类型,任何类型的值进行运算时,都会转换为number类型进行运算,最终结果为number型
- 字符串类型,进行运算时,实际上都是进行的拼串操作,即转换为string类型进行运算,最终结果为string型
有了以上两点结论,就可以进入我们的正题:数据类型的隐式转换了
转number
result = +"2"
console.log("typeof +'2' = ", typeof result)
result = +true
console.log("typeof +true = ", typeof result)
result = +null
console.log("typeof +null = ", typeof result)
result = +undefined
console.log("typeof +undefined = ", typeof result)
转string
result = 2 + ""
console.log("typeof 2 + '' = ", typeof result)
result = true + ""
console.log("typeof true + '' = ", typeof result)
result = null + ""
console.log("typeof null + '' = ", typeof result)
result = undefined + ""
console.log("typeof undefined + '' = ", typeof result)
补充总结
- 任何值(除字符串类型)和NaN做运算,结果都是NaN
- 对数值除0的情况,不会抛出异常,结果为infinity
result = 1 + NaN
console.log("1 + NaN = " + result)
result = "1" + NaN
console.log("'1' + NaN = " + result)
result = true + NaN
console.log("true + NaN = " + result)
result = null + NaN
console.log("null + NaN = " + result)
result = 4 / null
console.log("4 / null = " + result)
result = 4 / 0
console.log("4 / 0 = " + result)