栈内存和堆内存/let和const/面向对象-构造函数的方式

97 阅读1分钟

引用数据类型 会开辟一个内存(栈内存(内存的地址) 和 堆内存(内存的值) )

   let obj1 = {name:'zhangsan',age:20};
        let obj2 = {};

        /* obj1的栈内存的地址给了obj2 */
        obj2 = obj1;

        /* obj2 把obj1的堆内存的name值 由zhangsan 改成了 lili */
        obj2.name="lili"

        /* 所以 obj1 和 obj2 的值 都是一样的 其实都是obj1的堆内存的值 */
        console.log('obj1',obj1);
        console.log('obj2',obj2);

let不能重复声明

let具有块级作用域(暂时性的死区)

let不能变量提升

const

   /* 定义常量的 不能给常量重复的赋值 */
        // const url = 'http://timemeetyou.com:8889/api/private/v1/';
        /* url = 'http://www.baidu.com' */ /* 会报错 */

        /* 定义对象 引用数据类型 会开辟一个堆内存 内存地址不会变化*/
        /* 地址不会被改变 也就不会报错 */
        const obj = {
            name:"zhangsan"
        }
        obj.name = 'lili'
        obj.age = 20

        /* 改变obj的内存地址会报错 */
        /* let obj2 = {}
        obj = obj2; */
        
        console.log(obj);

面向对象-构造函数的方式

  <script>
        /* obj是Object new出来的一个实例化对象 */
        // let obj = new Object()
        // obj.name = 'taotao'
        // obj.age = 30
        // obj.kaiche = function (){
        //     document.write( `${obj.name}--年纪${obj.age} 会开车` );
        // }
        // obj.kaiche();

        let obj = {
            "name":"taotao",
            "age":30,
            "kaiche":function (){
                console.log('this',this);
                document.write( `${this.name}--年纪${this.age} 会开车` );
            }
        }
        /* this是谁调用就是谁的  */
        obj.kaiche()
        console.log(obj);
        /* 对象字面量 */
        /* 对象定义的一种简写形式 */
        /* 简化创建包含大量属性的对象的过程 */
        /* 在为函数传递大量可选参数时,可考虑使用对象字面量 */
    </script>

基本数据类型 String Boolean Number Null Undefined Symbol

引用数据类型 Object(Array RegExp Function Date)

Symbol独一无二的值 不可以new