JS 里的数据类型转换

2018-05-18  本文已影响0人  遠_

强制转换

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

    1.Number()

        可以将任意类型的值转化成数值。

            方法: Number(x)

                        parseInt(x, 10)

                        parseFloat(x)

                        x - 0

                        +x

                    parseInt方法用于将字符串转为整数。

                    parseFloat方法用于将一个字符串转为浮点数。


    2.String()

        可以将任意类型的值转化成字符串

        (1)原始类型值

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

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

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

            undefined:转为字符串"undefined"。

            null:转为字符串"null"。

                String(123)  //    "123"

                String('abc')  //    "abc"

                String(true)  //    "true"

                String(undefined)  //    "undefined"

                String(null)  //    "null"

                x + ' '

        (2)对象        

            String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。


    3.Boolean()

        可以将任意类型的值转为布尔值。

            方法:Boolean(x)

                        !!x

        除了以下五个值的转换结果为false,其他的值全部为true。

            undefined

            null

            0

            NaN

            ' '(空字符串)


普通类型与对象的区别:

       数据区分为 Stack(栈内存) 和 Heap(堆内存)

            简单类型的数据直接存在 Stack 里   //number/string/null/undefined/boolean

            复杂类型的数据是把 Heap 地址存在 Stack 里   //object


深复制

    var a = 1

    var b = a

    b = 2 //这个时候改变 b

    a 完全不受 b 的影响

    那么我们就说这是一个深复制    

对于简单类型的数据来说,赋值就是深拷贝。

对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。


浅拷贝

    var a = {name: 'frank'}

    var b = a    

    b.name = 'b'

    a.name === 'b' // true

对 b 操作后,a 也变了

什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。


上一篇下一篇

猜你喜欢

热点阅读