介绍JS里的数据类型如何进行类型转换,Symbol类型不讨论

目录

  1. 任意类型转换成Number类型
    1. 1.Number(a)
    2. 2.parseInt(a,b)
    3. 3.parseFloat(a)
    4. 非常规方法 4. '1'-0 & 5. +'1'
  2. 2.任意字符转换成String类型
    1. 1.toString(a)
    2. 2.String(a)
    3. 非常规方法 3. '' + x & 4. x + ''
  3. 任意类型转换成Boolean类型
    1. 1.Boolean(a)
    2. 非常规方法 2.!! + x
  4. 深拷贝VS浅拷贝
    1. 深拷贝
    2. 浅拷贝

任意类型转换成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"