简单数据类型与复杂数据类型的区别

195 阅读2分钟

数据类型

* 1.基本数据类型(简单数据类型)
* 2.引用数据类型(复杂数据类型)

        基本数据类型内部存储的是值;引用数据类型内部存储的是地址


    1.存储
            变量的数据存储的地方是内存中,内存分为两个栈内存,堆内存

            * 基本数据类型存储在栈内存中,比如: string number undefined null boolean

            * 复杂数据类型
                数组/对象/函数名存放在栈内存中
                    将数据本体存放在堆内存中,比如对象或者数组或者函数
                    然后将指向该内存的地址,存放在数组名或者对象名或者函数名中

            面试题:数据类型之间有什么区别
                    基本数据类型有哪些,然后他们存储的地方是栈内存中
                    引用数据类型有哪些,然后他们数据本体存放的地方是堆内存中,然后变量名存储的位置是栈内存中

    2. 赋值
            * 基本数据类型:
                    赋值以后,两个变量之间没有任何关系,相当于将我自己的某一个东西,复制一份给你,然后你的就是你的,我得是我的

            * 复杂数据类型
                    因为变量内部存储的是指向堆内存的地址, 所以在赋值的时候, 其实是将 这个地址给到了另外一个变量
                    那么相当于这两个变量存储的是  同一个 钥匙, 所以操作其中一个变量的时候, 会影响另外一个变量

            基本数据类型:
                    var num1 = 100
                    var num2 = num1     // num2 === 100
                    num2 = 666
                    console.log(num1)   // 100
                    console.log(num2)   // 666

            复杂数据类型
                    var obj1 = {
                    name: 'QF001',
                    age: 18
                    }
                    var obj2 = obj1
                    console.log(obj2)   // {name: 'QF001', age: 18}

                    obj2.name = 'QF666'
                    console.log(obj2)   // {name: 'QF666', age: 18}
                    console.log(obj1)   // {name: 'QF666', age: 18}
    3. 比较
            * 基本数据类型:是值得比较

            * 复杂数据类型:比较的时候 比较的是 存储地址

                    var num1 = 100
                    var num2 = '100'
                    console.log(num1 === num2)  //  false

                    var arr1 = [1, 2, 3]
                    var arr2 = arr1
                    console.log(arr1 === arr2)  // true
            
    4. 传参
            * 基本数据类型:将值拷贝一份传递给形参,在函数内修改不会影响外界


            * 复杂数据类型:将值拷贝一份传递给形参,在函数内修改会影响外界

                            function fn(num) {
                            num = 'QF001'
                            }
                            var str = 'abc'
                            fn(str)
                            console.log(str)    // 'abc'

                            function fn1(o) {
                            o.name = 'qwer'
                            }
                            var obj = {
                            name: 'ABC'
                            }
                            fn1(obj)
                            console.log(obj.name)   // 'qwer'