复合类型的声明以及操作
复合类型的种类
- Object类 对象
- Array类 数组
- Function类 函数
复合类型的声明
-
Object类
- var obj = new Object()
- var obj = {}
-
Array类
- var arr = new Array();
- var arr = []
-
Function类
- var fun = new Function()
- function fun() {}
复合类型的增删改查
-
Object类
- 增
- 删
- 改
- 查
-
Array类
- 增
- 删
- 改
- 查
-
Function类
- 增
- 删
- 改
- 查
复合类型的字符串化与反字符串化
- Object类
- 字符串化
JSON.stringify()
- 反字符串化
JSON.parse()
- Array类
- 字符串化
- .toString()/String()
- .toLocaleString()
- .join()
- 反字符串化
- .split()
- Function类
-
字符串化
-
反字符串化
eval()
复合类型的遍历
-
Object类 例 var obj = { ‘name’: “yayaya”, ‘age’: ‘12’, ‘sex’: ‘female’ };
-
for in 遍历 (只遍历自身及原型链上的可枚举属性)
for (var index in obj) {
console.log(‘key=’, index, ‘value=’, obj[index])
}
-
Object.keys() 方法
返回一个包含对象自身所有可枚举属性的数组
console.log(Object.keys(obj)); //[name, age, sex]
-
Objcet.getOwnPropertyNames() 方法
返回一个包含对象自身所有可枚举和不可枚举属性的数组
console.log(Object.getOwnPropertyNames(obj)); //[name, age, sex]
-
Array类 例 var arr = [1,2,3,4,5,6]
-
for循环遍历
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
-
for in 遍历 ( 遍历时,索引是字符串,不能进行运算,更适合遍历对象)
for (var key in arr) {
console.log(key);
}
-
for of 遍历
for(var key of arr) {
console.log(key);
}
-
forEach()
arr.forEach(function (item, index, array) {
console.log(item) // 1 2 3 4 5 6
console.log(array) // [1, 2, 3, 4, 5, 6]
})
-
map
var newArr = arr.map(function (item, index) {
return item * item
})
console.log(newArr) // [1, 4, 9, 16, 25, 36]
复合类型的深浅复制
深复制和浅复制最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用
浅复制
仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变
-
Array类
const cloneArray = originArray;
-
Object类
const cloneObj = originObj;
深复制
在计算机中开辟了一块内存地址用于存放复制的对象
- 利用JSON对象中的parse和stringify
- 利用递归来实现每一层都重新创建对象并赋值
JavaScript中concat,slice,Object.assign(),… 展开运算符 都只是对数组的第一层进行深复制