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也变)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 转字符串 1.1 String(x) String函数可以将任意类型的值转化成字符串。 数值:转化为相应的字...
    sxfshdf阅读 3,616评论 0 50
  • JavaScript 是一种弱类型的语言,也就是没有类型限制,变量可以随时被赋予任意值。同时,在程序运行过程中,类...
    胡小胖_阅读 1,566评论 0 0
  • JavaScript是一种动态类型语言,变量没有类型限制,可以随时赋予任意值,而在参与运算的时候,内部会进行一系列...
    青花_490e阅读 1,423评论 0 0
  • 1、感恩妈妈,今天又手把手教我包粽子,我终于可以包出四棱角的粽子了,缠绕线还需要练习。哈哈,以后咱也是专业包粽子人...
    富足喜悦的丽琴阅读 1,280评论 0 0
  • 最近饱受鼻炎困扰,醒来头沉得抬不起来。回笼觉里一通瞎梦,又梦见不切实际的事情,还以为真实发生了。醒来后特地确认了一...
    奚所以阅读 1,319评论 0 0