JS.DAY09.笔记

151 阅读1分钟

一、数据类型的存储

  1. 基本数据类型存储在栈内
  2. 引用数据类型存储在堆内存中
  3. 数组的浅拷贝/浅复制
       // 数组的浅复制 -- 只是复制了地址(共享地址)
        var arr = [1,2,3];
        var arr2 = arr;
        console.log(arr2)//[1, 2, 3]
        // 浅复制中,是共享了地址,存储的数据发生改变就会发生改变
        arr2.push("x");
        console.log(arr2);//[1, 2, 3, 'x']
        console.log(arr)//[1, 2, 3, 'x']

  1. 数组的深复制/深拷贝
        // 数组的深复制 -- 复制了数组中的值
        // 声明一个新数组,通过遍历将原数组的值赋值入新数组,或者用slice方法,把原数组中的值存入新的数组当中
        var arr3 = arr.slice()
        console.log(arr3);//[1, 2, 3, 'x']
        // 深复制中,无论怎么改变新数组arr3中的值,原数组也不会被影响
        arr3.push("t");
        console.log(arr3);//[1, 2, 3, 'x', 't']
        console.log(arr)//[1, 2, 3, 'x']
  1. 应为有数组的深浅复制,因此,在封装函数时如果想改变原数组,就直接操作形参,如果不想改变原数组,就实现深复制然后操作新的数组。

  2. 给标签加内容:innerHTML

二、二维数组

  1. 什么是二维数组? 即数组中的元素又是数组 var arr1 = [[1,2,3,4],[5,6,3,4],[4,6,21,2]]
  2. 二维数组的初始化 方法一 var arr = [[1,2],['a','b']];console.log(arr[1][0]); //a 第2列第1行所在的元素

方法二 var arr= new Array(new Array(1,2),new Array("a","b"));console.log(arr[1][0]);

方法三

        var arr1 = [[1,2,3,4],[5,6,3,4],[4,6,21,2]]
        var arr = new Array();         //先声明一维
       for(var i=0;i<5;i++){          //一维长度为5
          arr[i]=new Array(i);    //在声明二维
          for(var j=0;j<5;j++){      //二维长度为5
             arr[i][j]=i;
            }        
        } //然后,遍历二维数组arr

三、对象

  1. 语法 属性:属性值

方法:函数

  1. 对象是描述同一类型的事物 具有无序性 数组是存储同一类型的数据,具有有序性

  2. 创建对象的方式

        // 实例化一个空对象
        var obj = new Object();
        //赋值
        obj.name = "王丽";
        obj.nickname = "郭老师";
        obj.age = 39;
        obj.sex = "女";

       // 创建一个对象
        misGuo = {
            name:"王丽",
            nickname:"郭老师",
            age:18,
            sex:"女",
        }

  1. 对象的访问方式和遍历

        // 对象的访问方式有两种 
        // 对象名["属性名"]
        // 对象名.属性名

        // 对象的遍历 数组能遍历 对象也可以遍历 对象的遍历只能用for in
        for(var key in obj){
            console.log(obj[key]);
        }
  1. 对象的浅拷贝
        // 浅拷贝只是复制了地址

        var obj1 = obj;
        console.log(obj1);
        // obj1 与 obj 公用一个地址  此时obj1改变了地址里的值,obj也会改变
        obj1.name = "达令";
        console.log(obj1);//{name: '达令', nickname: '郭老师', age: 39, sex: '女'}
        console.log(obj)//{name: '达令', nickname: '郭老师', age: 39, sex: '女'}

6.对象的深拷贝

        //对象的深拷贝  复制了数组中的值
        // 声明一个新的空的对象通过遍历把原来对象里的值都装进去。实现了深拷贝
        var newObj =  new Object();
        // 遍历misGuo数组
        for(var key in misGuo){
            newObj[key] = misGuo[key];
        }
        console.log(newObj);//{name: '王丽', nickname: '郭老师', age: 18, sex: '女'}
        // 此时改变newObj对象里的值 原来的对象不会受到改变
        newObj.name = "郭大姐"
        console.log(newObj);//{name: '郭大姐', nickname: '郭老师', age: 18, sex: '女'}
        console.log(misGuo);//{name: '王丽', nickname: '郭老师', age: 18, sex: '女'}

- 模板字符串

  1. 模板字面量 是允许嵌入表达式的字符串字面量。你可以使用多行字符串和字符串插值功能。它们在ES2015规范的先前版本中被称为“模板字符串”。
  2. 语法:
`<span>${a}</span>`