JS-数据类型转换

我们已经知道了JS的六种基本数据类型:number,boolean,string,object,undefined,null,但是js是动态类型1语言,变量没有类型限制,可以随时赋予任意值。所以我们来讨论js的数据类型转换。

一 强制转换

强制转换主要指使用Number、String和Boolean三个函数,手动将各种类型的值,分布转换成数字、字符串或者布尔值。

Number转换

数值:转换后还是原来的值

字符串:如果可以被解析为数值,则转换为相应的数值Number('324')// 324// 

字符串:如果不可以被解析为数值,返回 NaN

空字符串转为0

布尔值:true 转成 1,false 转成

undefined:转成 NaN

null:转成0

String函数

数值:转为相应的字符串。

字符串:转换后还是原来的值。

布尔值:true转为字符串"true",false转为字符串"false"。

undefined:转为字符串"undefined"。

null:转为字符串"null"。

Boolean函数

undefined,null,-0或+0,NaN'',(空字符串)转换为false,其余全部为true

二 自动转换

遇到以下三种情况时,JavaScript 会自动转换数据类型,即转换是自动完成的,用户不可见。

第一种情况,不同类型的数据互相运算。

第二种情况,对非布尔值类型的数据求布尔值。

第三种情况,对非数值类型的值使用一元运算符(即+和-)。

自动转换的规则是这样的:预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。

由于自动转换具有不确定性,而且不易除错,建议在预期为布尔值、数值、字符串的地方,全部使用Boolean、Number和String函数进行显式转换。

自动转换为布尔值

JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。

自动转换为字符串

JavaScript 遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。具体规则是,先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。

字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。

自动转换为数值

JavaScript 遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number函数。

除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。

内存图

一般网页内存分为两块,一边存代码也叫做“代码区”,一边存数据“数据区”。

数据区又分两块,左边Stack(栈内存),右边Heap(堆内存)。

画内存图时,

把值(简单的数据类型)直接放在Stack里;

复杂型的如(object)把Heap ADDR存入Stack里。

深拷贝与浅拷贝(有点类似于指针?)

var a = 1

bar b = a

b = 2

a = ?

//a = 1

上面代码表示b变不影响a,如果能实现这样的,简单类型除对象的赋值就叫做深拷贝!(b变a不变)

var a = {name:'a'}

var b = a

b.name = 'b'

a.name ?

//a.name = 'b'

b变化导致a也跟着变化,这就叫做浅拷贝。(b变a也变)

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