.首先说明JS中变量没有限制,可以随时赋予任何值。
.数据类型转换可以分为两大类,一强制转换,二自动转换。
一.所谓的强制转换就是通过Number(),String(),和Boolean().三个函数进行转换。这三个函数分别转换成数值,字符串,布尔值。
1.Number()函数转换有两种情况,一种参数是原始类型的值,另一种参数是对象。
1.1参数是原始类型的值,有如下规则
//参数为数值:转换后还是数值
Number(324) //324
//参数为字符串:(可以被解析为数值)返回数值
Number('324') //324
//参数为字符串:(含有不能被解析为数值的字符)返回NaN
Number('324abc') //NaN
//参数为空字符串:返回0
Number('') //0
//参数为布尔值:true返回1,false返回0
Number(true) //1
Number(false) //0
//参数为undefined:返回NaN
Number(undefined) //NaN
//参数为null:返回0
Number(null) //0
Number比parseInt严格的很多,一但有不能转换成数值的字符,就返回NaN
Number('324 dog') //NaN
parseInt('324 dog') //324
parseInt一个一个的解析字符,二Number整体转换字符串。
1.2.参数为对象,除了是单个数值的数组返回对应的数值外,其他所有的对象都返回NaN.
Number({a:1}) //NaN
Number([1,2,3]) //NaN
Number([324]) //324
解释就是Number转换有点复杂。他的转换分三个步骤,第一步调用对象的valueOf(),返回原始类型值,就直接使用Number进行转换。第二步如果返回值还是对象,就会调用toString()方法,如果返回原始类型值,就直接使用Number进行转换,第三步,如果toString()返回值还是对象就直接报错。
2.Sring(),将任意类型的值,转化为字符串。规则如下
2.1,参数为原始类型值是
数值:转为相应的字符串。
字符串:转换后还是原来的值。
布尔值:true转为字符串"true",false转为字符串"false"。
undefined:转为字符串"undefined"。
null:转为字符串"null"。
String(234) // '324'
String('324') //'324'
String('ture') //'true'
String('false') //'false'
String(undefined) //'undefined'
String(nulll) //'null'
2.2参数为对象
参数为对象时和Number参数为对象的步骤是差不多的,不过String(),它和Number执行的步骤相反,它先执行toString之后再调用valueOf()。
.如参数为对象就返回类型字符串,如果参数为数组就返回该数组的字符串形式。
String({a:1}) //'[object object]'
String([1,2,,3]) //'123'
3.Boolean函数转换。这个就牛了,除了5个会被转换为false之外,其他的经过转换全部为true。
3.1转换为false的值
Boolean(undefined) //false
Boolean(null) //false
Boolean(+0/-0) //false
Boolean('') //false
Boolean(NaN) //false
一切对象转Boolean都是true,包括空对象。
二.自动转换:三种情况会自动转换,这自动转换建立在强制转换的基础上的。
1.不同类型的数据进行运算的时候,
123 + 'abc // '123abc'
2.对非布尔数据类型求布尔值的时候,
if('abc'){
console.log('World')
}
//' World'
3.对非数值类型的数据使用一元运算符的时候。
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN
(1)自动转为字符串
.字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。(规则先将复合类型的值转化为原始类型的值,再将原始类型的值转化为字符串)
'324' + 1 // '3241'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
(2)自动转换为数值
.除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
网友评论