一、数据类型的存储
- 基本数据类型存储在栈内
- 引用数据类型存储在堆内存中
- 数组的浅拷贝/浅复制
// 数组的浅复制 -- 只是复制了地址(共享地址)
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']
- 数组的深复制/深拷贝
// 数组的深复制 -- 复制了数组中的值
// 声明一个新数组,通过遍历将原数组的值赋值入新数组,或者用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']
-
应为有数组的深浅复制,因此,在封装函数时如果想改变原数组,就直接操作形参,如果不想改变原数组,就实现深复制然后操作新的数组。
-
给标签加内容:innerHTML
二、二维数组
- 什么是二维数组? 即数组中的元素又是数组
var arr1 = [[1,2,3,4],[5,6,3,4],[4,6,21,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
三、对象
- 语法 属性:属性值
方法:函数
-
对象是描述同一类型的事物 具有无序性 数组是存储同一类型的数据,具有有序性
-
创建对象的方式
// 实例化一个空对象
var obj = new Object();
//赋值
obj.name = "王丽";
obj.nickname = "郭老师";
obj.age = 39;
obj.sex = "女";
// 创建一个对象
misGuo = {
name:"王丽",
nickname:"郭老师",
age:18,
sex:"女",
}
- 对象的访问方式和遍历
// 对象的访问方式有两种
// 对象名["属性名"]
// 对象名.属性名
// 对象的遍历 数组能遍历 对象也可以遍历 对象的遍历只能用for in
for(var key in obj){
console.log(obj[key]);
}
- 对象的浅拷贝
// 浅拷贝只是复制了地址
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: '女'}
- 模板字符串
- 模板字面量 是允许嵌入表达式的字符串字面量。你可以使用多行字符串和字符串插值功能。它们在ES2015规范的先前版本中被称为“模板字符串”。
- 语法:
`<span>${a}</span>`