第6章 集合引用类型
第六章 集合引用类型
Object
显示地创建Object的实例由两种方式
// 使用new 操作符和Object构造函数
let person = new Object();
person.name = "Nicholas";
person.age = 29;
// 使用对象字面量表示法
// 在对象字面量表示法中,属性名可以是字符串或者数值
let person = {
name: "Nicholas",
age: 29
};
// 上述表示还可以表示为
let person = {}
person.name = "Nicholas";
person.age = 29;
对象字面量已经成为给函数传递大量可选参数的主要方式
function displayInfo(args) {
...
}
// 在这里 给函数displayInfo主要传递了一个对象字面量的参数
displayInfo( {
name: "Nicholas",
age: 29
})
获取对象属性的方法
person.name;
person['name'];
Array
ES数组是一组有序的数据,它的每个槽位可以存储任意类型的数据(意味着元素可以是字符串或者数值或者对象),ES数组也是动态大小的,会随着数据添加而自动增长。
创建数组
// 1、使用Array构造函数
// 长度
let colors = new Array(20);
// 内容
let colors = new Array("red","green","yellow");
// 2、使用数组字面量
let colors = ["red","green","yellow"];
ES6新增了两个用于创建数组的静态方法:from() 和 of()
from用于将类数组结构转换为数组实例
第一个参数为一个类数组对象
console.log(Array.from("Matt")); // ["M", "a", "t", "t"]
const m = new Map().set(1, 2)
.set(3, 4);
console.log(Array.from(m)); // [[1, 2], [3, 4]]
// Array.from()对现有数组执行浅复制
const a1 = [1, 2, 3, 4];
const a2 = Array.from(a1);
第二个参数为可选的映射函数参数
const a1 = [1, 2, 3, 4];
const a2 = Array.from(a1, x => x**2);
console.log(a2); // [1, 4, 9, 16]
of用于将一组参数转换为数组实例
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4]
数组索引
可以通过修改length的值,从数组末尾删除或者添加元素
// 删除元素
let colors = ["red","yellow","green"];
colors.length = 2;
alert(colors[2]); // undefined
// 添加元素 因为数组中最后一个元素的索引总是length-1,所以在索引length处赋值相当于添加元素
colors[colors.length] = "black";
alert(colors.length) = 3;
检测数组
Array.isArray(arr);
填充方法
const zeroes = [0,0,0,0,0];
// 第一个参数:要填充的值
// 第二个参数:开始填充的位置
// 第三个参数:结束填充的位置(不包括)
zeroes.fill(7,1,3); // [0,7,7,0,0]
转换方法
Map
ES6的新增特性,Map是一种新的集合类型
基本API
// 使用嵌套数组初始化映射
const m1 = new Map([
["key1","val1"],
["key2","val2"],
["key3","val3"]
]);
alert(m1.has("key1")); // true
alett(m1.get("key1")); // val1
alert(m1.size); // 2
m1.set("key4","val4")
.set("key5","val5");
m1.delete("key1"); // 只删除这一个键值对
alert(m1.size); // 4
m1.clear(); // 清除这个映射实例中的所有键值对
// 注意:Map可以使用任何js数据类型作为键
顺序与迭代
Map实例会维护键值对的插入顺序,依次可以根据插入顺序执行迭代操作
const m = new Map([
["key1","val1"],
["key2","val2"],
["key3","val3"]
])
for(let pair of m.entries()) {
alert(pair);
}
// [key1,val1]
// [key2,val2]
// [key3,val3]
// 上述代码等价于
for(let pair of m[Symbol.iterator]()) {
alert(pair);
}
注意:因为entries()是默认迭代器,可以直接对映射实例使用扩展操作,把映射转换为数组:
console.log([...m]); // [[key1,val1],[key2,val2],[key3,val3]]
WeakMap
弱映射
Set
WeakSet
迭代与扩展操作
有4种原生集合类型定义了默认迭代器。(这意味着它们都可以支持顺序迭代,都可以传入for-of循环)
Array、所有定型数组、Map、Set
这也意味着所有这些类型都兼容扩展操作符。(…)
扩展操作符在对可迭代对象执行浅复制时特别有用,只需要简单的语法就可以复制整个对象。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 邹阳 の 博客!