介绍JS里的数据类型如何进行类型转换,Symbol
类型不讨论
目录
任意类型转换成Number类型
1.Number(a)
除了要转换的类型本身内容是数字将被转换成对应的number,其余类型都会被转换成
NaN
(非数字)
Number('1') //1
Number('s') //NaN
Number('null') //0
Number('undefined') //NaN
obj = {a:5}
Number(obj) //NaN
function a(){ return 1;} //NaN
Number(a)
2.parseInt(a,b)
将字符串转换成整数类型,第一个参数代表要转换的内容,第二个参数代表要转换成什么进制。一般选择十进制。进制取值为2~37
parseInt('011',10) //11
parseInt('0x11',10) //0
parseInt('011',36) //37
parseInt('0x11') //17
parseInt('08') //8
parseInt('011',2) //3
3.parseFloat(a)
将字符串转换成浮点数,只能转换成十进制
parseFloat('3.14') //3.14
parseFloat('314e-2') //3.14
parseFloat("0.0314E+2") //3.14
parseFloat("3.14more non-digit characters") //3.14
parseFloat("FF2") //NaN
非常规方法 4. '1'-0
& 5. +'1'
方便的让字符串转换成数字。既能转换成整数,又能转换成浮点数。
'1.23' -0 //1.23
0+'1.23' //"1.23"
2.任意字符转换成String类型
1.toString(a)
用toString()方法只能将number类型和Boolean类型转换成字符串。null、undefined会报错,object类型会显示不完全。
var a = 1
a.toString() //"1"
var b = true
b.toString() //"true"
var c = null
c.toString() //Cannot read property 'toString' of null
var d = undefined //Cannot read property 'toString' of null
d.toString()
var obj = { a:1 }
obj.toString() //"[object Object]"
2.String(a)
用String()是一个全局函数,可以将所有类型转换为字符串
String(1) //"1"
String(null) //"null"
String(undefined) //"undefined"
String(true) //"true"
String(obj) //"[object Object]"
非常规方法 3. '' + x
& 4. x + ''
加上一个空字符串就可以快速将其他类型转换成字符串
1 + '' //"1"
null + '' //"null"
undefined + '' //"undefined"
true + '' //"true"
obj + '' //"[object Object]"
任意类型转换成Boolean类型
1.Boolean(a)
可以转换所有类型为布尔类型
Boolean(1) //true
Boolean('s') //true
Boolean(null) //false
Boolean(undefined) //false
Boolean(obj) //true
Boolean(function(){}) //true
非常规方法 2.!! + x
这是一种最便捷最快的方式来使其他类型转换为布尔类型
!!1 //true
!!null //false
!!undefined //false
!!obj //true
!!'s' //true
- 布尔类型中有五个falsy值,分别是:NaN, 0, null, undefined, ‘’.
- falsy是在Boolean 上下文中认定可转换为false的值.
- 对象数据类型无论是空对象还是其他对象,只要是对象转换为布尔值就是true
- MDN: https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy
深拷贝VS浅拷贝
注:深拷贝浅拷贝可以通过画内存图了解区别。
深拷贝
b变不影响a,这样就是深拷贝。另外基本类型赋值就是深拷贝。
var a = 1 //undefined
var b = a //undefined
b = 2 //2
a //1
浅拷贝
b变影响a变,这样就是浅拷贝。
var a = { //undefined
name:'a'
}
var b = a //undefined
b.name='b' //"b"
a.name //"b"