-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathObject和Array复习.js
130 lines (58 loc) · 7.01 KB
/
Object和Array复习.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
显式地创建 Object 的实例有两种方式。第一种是使用 new 操作符和 Object 构造函数
另一种方式是使用对象字面量(object literal)表示法。对象字面量是对象定义的简写形式,目的是为了简化包含大量属性的对象的创建。
表达式上下文(expression context)
在 ECMAScript 中,表达式上下文指的是期待返回值的上下文。
如果出现在语句上下文(statement context)中,比如 if 语句的条件后面,则表示一个语句块的开始。
可以用对象字面量表示法来定义一个只有默认属性和方法的对象
使用 Array 构造函数
Array 构造函数还有两个 ES6 新增的用于创建数组的静态方法:from()和 of()。from()用于将类数组结构转换为数组实例,而 of()用于将一组参数转换为数组实例。
Array.from()的第一个参数是一个类数组对象,即任何可迭代的结构,或者有一个 length 属性和可索引元素的结构。
Array.from()还接收第二个可选的映射函数参数。还可以接收第三个可选参数,用于指定映射函数中 this 的值。
Array.of()可以把一组参数转换为数组。这个方法用于替代在 ES6之前常用的 Array.prototype.slice.call(arguments)
使用数组字面量初始化数组时,可以使用一串逗号来创建空位(hole)。
ES6 新增方法普遍将这些空位当成存在的元素,只不过值为 undefined:
// map()会跳过空位置
// join()视空位置为空字符串
value instanceof Array
ECMAScript 提供了 Array.isArray()方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。
在 ES6 中,Array 的原型上暴露了 3 个用于检索数组内容的方法:keys()、values()和entries()
keys()返回数组索引的迭代器,values()返回数组元素的迭代器,而 entries()返回索引/值对的迭代器
ES6 新增了两个方法:批量复制方法 copyWithin(),以及填充数组方法 fill()。使用 fill()方法可以向一个已有的数组中插入全部或部分相同的值。
所有对象都有 toLocaleString()、toString()和 valueOf()方法。
valueOf() 返回的还是数组本身。而 toString()返回由数组中每个值的等效字符串拼接而成的一个逗号分隔的字符串。
显式调用的 toString()和 valueOf()方法,它们分别返回了数组的字符串表示,即将所有字符串组合起来,以逗号分隔。
join()方法接收一个参数,即字符串分隔符,返回包含所有项的字符串
如果不给 join()传入任何参数,或者传入 undefined,则仍然使用逗号作为分隔符。
栈是一种后进先出(LIFO,Last-In-First-Out)的结构,也就是最近添加的项先被删除。数据项的插入(称为推入,push)和删除(称为弹出,pop)只在栈的一个地方发生,即栈顶。ECMAScript 数组提供了 push()和 pop()方法,以实现类似栈的行为。
push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。pop()方法则用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项。
队列以先进先出(FIFO,First-In-First-Out)形式限制访问。队列在列表末尾添加数据,但从列表开头获取数据。因为有了在数据末尾添加数据的 push()方法,所以要模拟队列就差一个从数组开头取得数据的方法了。这个数组方法叫 shift(),它会删除数组的第一项并返回它,然后数组长度减 1。使用 shift()和 push(),可以把数组当成队列来使用
数组有两个方法可以用来对元素重新排序:reverse()和 sort()
默认情况下,sort()会按照升序重新排列数组元素,即最小的值在前面,最大的值在后面。sort()会在每一项上调用 String()转型函数,然后比较字符串来决定顺序。即使数组的元素都是数值,也会先把数组转换为字符串再比较、排序。
sort()方法可以接收一个比较函数,用于判断哪个值应该排在前面。
比较函数接收两个参数,如果第一个参数应该排在第二个参数前面,就返回负值;如果两个参数相等,就返回 0;如果第一个参数应该排在第二个参数后面,就返回正值。
concat()方法可以在现有数组全部元素基础上创建一个新数组。它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。
如果传入一个或多个数组,则 concat()会把这些数组的每一项都添加到结果数组。
打平数组参数的行为可以重写,方法是在参数数组上指定一个特殊的符号:Symbol.isConcatSpreadable。这个符号能够阻止 concat()打平参数数组。相反,把这个值设置为 true 可以强制打平类数组对象
方法 slice()用于创建一个包含原有数组中一个或多个元素的新数组。slice()方法可以接收一个或两个参数:返回元素的开始索引和结束索引。如果只有一个参数,则 slice()会返回该索引到数组末尾的所有元素。如果有两个参数,则 slice()返回从开始索引到结束索引对应的所有元素,其中不包含结束索引对应的元素。
splice()
比如 splice(0, 2)会删除前两个元素。
比如,splice(2, 0, "red", "green")会从数组位置 2 开始插入字符串"red"和"green"。
比如,splice(2, 1, "red", "green")会在位置 2 删除一个元素,然后从该位置开始向数组中插入"red"和"green"。
splice()方法始终返回这样一个数组,它包含从数组中被删除的元素(如果没有删除元素,则返回空数组)。
ECMAScript 提供两类搜索数组的方法:按严格相等搜索和按断言函数搜索。
ECMAScript 提供了 3 个严格相等的搜索方法:indexOf()、lastIndexOf()和 includes()。而第三个方法是 ECMAScript 7 新增的。
断言函数接收 3 个参数:元素、索引和数组本身。
find()和 findIndex()方法使用了断言函数。
找到匹配项后,这两个方法都不再继续搜索。
every():对数组每一项都运行传入的函数,如果对每一项函数都返回 true,则这个方法返回 true。
filter():对数组每一项都运行传入的函数,函数返回 true 的项会组成数组之后返回。
forEach():对数组每一项都运行传入的函数,没有返回值。
map():对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。
some():对数组每一项都运行传入的函数,如果有一项函数返回 true,则这个方法返回 true。
ECMAScript 为数组提供了两个归并方法:reduce()和 reduceRight()。
传给 reduce()和 reduceRight()的函数接收 4 个参数:上一个归并值、当前项、当前项的索引和数组本身。
*/
let colors = [1, "blue", "green"]; // 创建一个包含 3 个字符串的数组
console.log(colors.toString());
console.log(colors.valueOf());