集合引用类型

一、集合引用类型

对象
数组与定兴数组
Map、WeakMap、Set、WeakSet类型

1.1 Object
显示创建Object:

1、两种方式new 操作符和Object 构造函数

let person = new Object();
person.name = "Nicholas";
person.age = 18;

2、使用对象字面量

let person = { 
  name: "Nicholas", 
  age: 29 
};

第8章将更全面、深入地介绍 Object 类型

1.2 Array
Array.isArray() 方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。来看下面的例子:

if(Array.isArray(value)){
    // 操作数组
}

Array的迭代器

keys() 、 values() 和 entries() 。 keys() 返回数组索引的迭代器, values() 返回数组元素的迭代器,而 entries() 返回索引/值对的迭代器:

const a = ["foo", "bar", "baz", "qux"]

// 因为这些方法都返回迭代器,所以可以将它们的内容 
// 通过Array.from()直接转换为数组实例 
const aKeys = Array.from(a.keys()); 
const aValues = Array.from(a.values()); 
const aEntries = Array.from(a.entries()); 
 
console.log(aKeys);     // [0, 1, 2, 3] 
console.log(aValues);   // ["foo", "bar", "baz", "qux"] 
console.log(aEntries);  // [[0, "foo"], [1, "bar"], [2, "baz"], [3, "qux"]]
const a = ["foo", "bar", "baz", "qux"]; 
for (const [idx, element] of a.entries()) {
  alert(idx); 
  alert(element); 
}

复制和填充数组

批量复制方法 fill()

const zeroes = [0, 0, 0, 0, 0]; 
 
// 用5填充整个数组 
zeroes.fill(5); 
console.log(zeroes);  // [5, 5, 5, 5, 5] 
zeroes.fill(0);       // 重置 
 
// 用6填充索引大于等于3的元素 
zeroes.fill(6, 3); 
console.log(zeroes);  // [0, 0, 0, 6, 6] 
zeroes.fill(0);       // 重置

// 用7填充索引大于等于1且小于3的元素 
zeroes.fill(7, 1, 3); 
console.log(zeroes);  // [0, 7, 7, 0, 0]; 
zeroes.fill(0);       // 重置 
 
// 用8填充索引大于等于1且小于4的元素 
// (-4 + zeroes.length = 1) 
// (-1 + zeroes.length = 4) 
zeroes.fill(8, -4, -1); 
console.log(zeroes);  // [0, 8, 8, 8, 0];

fill() 静默忽略超出数组边界、零长度及方向相反的索引范围:

const zeroes = [0, 0, 0, 0, 0]; 
 
// 索引过低,忽略 
zeroes.fill(1, -10, -6); 
console.log(zeroes);  // [0, 0, 0, 0, 0] 
 
// 索引过高,忽略 
zeroes.fill(1, 10, 15); 
console.log(zeroes);  // [0, 0, 0, 0, 0] 
 
// 索引反向,忽略 
zeroes.fill(2, 4, 2); 
console.log(zeroes);  // [0, 0, 0, 0, 0] 
 
// 索引部分可用,填充可用部分 
zeroes.fill(4, 3, 10) 
console.log(zeroes);  // [0, 0, 0, 4, 4]

填充数组方法copyWithin()

let ints, 
    reset = () => ints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
reset(); 
 
// 从ints中复制索引0开始的内容,插入到索引5开始的位置 
// 在源索引或目标索引到达数组边界时停止 
ints.copyWithin(5); 
console.log(ints);  // [0, 1, 2, 3, 4, 0, 1, 2, 3, 4] 
reset(); 
 
// 从ints中复制索引5开始的内容,插入到索引0开始的位置 
ints.copyWithin(0, 5); 
console.log(ints);  // [5, 6, 7, 8, 9, 5, 6, 7, 8, 9] 
reset(); 
 
// 从ints中复制索引0开始到索引3结束的内容 
// 插入到索引4开始的位置 
ints.copyWithin(4, 0, 3); 
alert(ints);  // [0, 1, 2, 3, 0, 1, 2, 7, 8, 9] 
reset(); 
 
// JavaScript引擎在插值前会完整复制范围内的值 
// 因此复制期间不存在重写的风险 
ints.copyWithin(2, 0, 6); 
alert(ints);  // [0, 1, 0, 1, 2, 3, 4, 5, 8, 9] 
reset(); 
 
// 支持负索引值,与fill()相对于数组末尾计算正向索引的过程是一样的 
ints.copyWithin(-4, -7, -3); 
alert(ints);  // [0, 1, 2, 3, 4, 5, 3, 4, 5, 6]

数组的转换方法

如果数组中某一项是 null 或 undefined ,则在 join() 、
toLocaleString() 、 toString() 和 valueOf() 返回的结果
中会以空字符串表示。

let colors = ["red", "green", "blue"]; 
alert(colors.join(","));     // red,green,blue 
alert(colors.join("||"));    // red||green||blue

数组的栈方法

数组对象可以像栈一样,也就是一种限制插入和删除项的数据结构
栈是一种后进先出(LIFO,Last-In-First-Out)的结构,也就是最近添加的项先被删除。数据项的插入(称为推入,push)和删除(称为弹出,pop)只在栈的一个地方发生,即栈顶。
ECMAScript数组提供了push()和pop()方法,以实现类似栈的行为。

push() 方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度

pop() 方法则用于删除数组的最后一项,同时减少数组的 length值,返回被删除的项。

let colors = new Array()

//推入两项
let count = colors.push("red","green");
// 获取最后一项
let item = colors.pop(); // green
console.log(colors) // red

列队方法

shift() 获取第一项并删除
unshift() 在数组开头添加任意值,并返回数组长度

排序方法(2个)

reverse()从大到小排序

let values = [1, 2, 3, 4, 5]; 
values.reverse(); 
alert(values);  // 5,4,3,2,1

sort()
会在每一项上调用String()转型函数,然后比较字符串来决定顺序。即使数组的元素都是数值,也会先把数组转换为字符串再比较、排序。

let values = [0, 1, 5, 10, 15]; 
values.sort(); 
alert(values);  // 0, 1, 10, 15, 5

数组的操作方法

concat()

let colors = ["red", "green", "blue"]; 
let colors2 = colors.concat("yellow", ["black", "brown"]); 
console.log(colors); // ["red", "green","blue"]
console.log(colors2); // ["red", "green", "blue","yellow", "black", "brown"]
posted @ 2023-06-01 14:36  会飞的小白  阅读(8)  评论(0编辑  收藏  举报