JS 里的数据类型转换

一、数据类型转换

 

不同数据类型之间转换方法:

(一)、任意数据类型转为string

1.number转为string

例如:var n = 1

      n.tostring()   //1+’ ’空字符串       //全局方法:window.String(1)

      ‘1’


2.boolean转为string

例如:var b = true

      b.tostring()   //true+’ ’空字符串//全局方法:window.String(true)

      ‘true’


3.Null转为string

例如:var c =null

      c.tostring()    //null+’ ’空字符串//全局方法:window.String(null)

报错/‘null’’


4.undefined转为string

例如:var c =undefined

      c.tostring()                   //undefined+’ ’空字符串

//全局方法:window.String(undefined)

报错//’undefined’


5.object转为strings

例如:var object = {‘name’: ‘frank’}

      object.tostring()    //obj+’ ’空字符串//全局方法:window.String({})

      ‘[object  Object]’


1+1=2

1+’1’数字1和字符串1不能相加(不同数据类型不能相加)

1+’1’=11    1+’1’= (1).tostring()+’1’=’1’+’1’=11


 

 

(二、)任意数据类型转为boolean

1.Number转为boolean

例如:boolean(1)   // !!1

           True

注意:number转为boolean只有两个值是false,即0 , NaN,其他number转为boolean的值都为true


2.String转为boolean

例如:(1)boolean(‘’)   // !!’’指空字符串

                    False

           (2)boolean(‘     ’)   // !!’    ’指非空字符串

                     True

注意:string字符串转为boolean只有一个值是false,即空字符串’’,其他string字符串转为boolean的值都为true


3.object转为boolean

例如:(1)boolean({})   //{}空对象

                   True

(2)boolean([])   // !![]空数组

         True

(3)boolean(function(){})   // !!function(){}空函数

         True

注意:object对象转为boolean所有值都为true,这里说的对象包括对象.数组.函数。



4.null转为boolean

例如:boolean(null)   // !!null

False


5.undefined转为boolean

例如:boolean(undefined)   // !!undefined

False


总结:其他数据类型转为boolean,只有5个值是假值(falsy值),即0 , NaN , ‘’空字符串,null, undefined


(三、)任意数据类型转为number如何转换?


例如:’1’转换为1,有以下几种方法:

(1)Number(‘1’)    === 1

(2)parseInt(‘1’ , 10)    === 1   考试常见第二种

(3)parseFloat(‘1.23’)   ===1.23

(4)‘1’ - 0 ===1    ‘1.23’- 0 ===1.23既有parseInt的功能,又有parseFloat的功能

(5)+ ‘1’  ===  1      + ‘-1’ === -1


parse是解析的意思









二、关于内存的理解

1.内存分为代码区和内存区,内存区又包括左内存Stack栈,右内存Heap堆,数字以64位存储,字符以16位存储。ECMAScript这样规定

2.值分为:(1)简单的数据类型 number/string/null/undefined/symbol,直接存储在Stack(2)复杂的数据类型object, 存Heap地址,存储在Stack


三、浅拷贝和深拷贝的区别

1.深拷贝

举例:var a = 1

      Var b = a

      b = 2

问答:a的值为多少?a = 1

结论:

(1)无论b的值怎么改变,a的值都不受影响,始终是1,这种情况称为深拷贝

(2)除了object以外的基本类型/简单赋值就是属于深拷贝


2.浅拷贝

举例:var a = {name:‘a’}

      Var b = a

      b.name = ‘b’ 

问答:a.name的值为多少?a.name = ‘b’ 

结论:

(1)b的值改变a的值也改变,这种情况称为浅拷贝

(2)除了object以外的基本类型/简单赋值就是属于深拷贝

你可能感兴趣的:(JS 里的数据类型转换)