JS-数据类型转换

作者: show_萧佩 | 来源:发表于2018-12-26 20:22 被阅读2次

    我们已经知道了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-数据类型转换

        本文链接:https://www.haomeiwen.com/subject/mmeklqtx.html