介绍
我们都知道JS中有六种简单数据类型:undefined、null、string、number、boolean、symbol、object(引用类型)
。
我们在声明的时候只有一种数据类型,在运行的时候才会确定变量的当前类型,如果运算时候的类型和预期不符合,就会触发类型转换机制。
常见的类型转换有:显式转换、隐式转换。
显示转换
显式转换就是我们俗称的强制转换,常见的方法有:
Number()
parselnt()
String()
Boolean()
Number()
是强制把任意类型的值转换为数值,规则如下:
undefined —— NaN
Null —— 0
true —— 1
false —— 0
Symbol —— Throw a TypeError exception
Object —— NaN
String —— NaN
特殊情况:
//在空字符串的时候是转为0的Number('');//0Number('dswe3');//NaN//对象:通常转换成NaN(除了只包含单个数值的数组)Number({a:1})//NaNNumber([1,2,3])//NaNNumber([5])//5
parselnt()
相对于Number转换时只要遇到一个字符无法转换为数值,整个字符串就会被转换为NaN,parselnt函数会逐个解析,遇到不能转换的字符就停止解析,例如:
parselnt('67djj88');//67
String()
可以将任意类型的值转化成字符串,规则如下:
Undefined —— 'Undefined'
Boolean —— 'true' 或者'false'
Number —— 对应数字的字符串
String —— String
Symbol —— Throw a TypeError exception
Object —— '[object Object]'
特殊情况:
String({r:1})//"[objectObject]"String([1,2,3])//"1,2,3"
Boolean()
可以将任意类型的值转为布尔值,规则如下:
可以转换为true的:
true、非空字符串、非零数值、任意对象、N/A
可以转换为false的:
false、空字符串、0、NaN、null、undefined
示例:
Boolean(undefined);//falseBoolean(null);//falseBoolean(0);//falseBoolean(NaN);//falseBoolean('');//falseBoolean({});//trueBoolean([]);//trueBoolean(newBoolean(false));//true
隐式转换
基本上隐式转换时在两种情况下发生的:
比较运算(==、!=、>、<)、if、while 需要布尔值地方
算术运算(+、-、*、/、%)
自动转换为布尔值
除了下面几种会被转化成 false,其他都换被转化成 true
undefined
null
false
+0
-0
NaN
""
自动转换成字符串
遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。
先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串:
'1'+1//'11''1'+true//"1true"'1'+false//"1false"'1'+{}//"1[objectObject]"'1'+[]//"1"'1'+function(){}//"1function(){}"'1'+undefined//"1undefined"'1'+null//"1null"
自动转换成数值
除了+
有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值
'5'-'2'//3'5'*'2'//10true-1//0false-1//-1'1'-1//0'5'*[]//0false/'5'//0'abc'-1//NaNnull+1//1undefined+1//NaN