抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

集合

集合是由一组无序且唯一(即不能重复)的项组成的

创建集合类

队列

队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾

apply可以改变函数的this指向(类似的还有call和bind),且函数的输入参数需要是一个数组
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
function test(a, b) {
console.log(a);
console.log(b);
}
const array = [1, 10];
test(array);
// [1, 10]
// undefined

test.apply(null, array);
// 1
// 10

var test = {
func: function (a, b) {
console.log(a);
console.log(b);
}
}
const array = [1, 10];
test.func(array);
// [1, 10]
// undefined
test.func.apply(test.func, array);
test.func.apply(null, array);
// 1
// 10

const array = [1, 2, 4, 6, 2, 8];
Math.max(array);
// NaN
const array = [1, 2, 4, 6, 2, 8];
Math.max.apply(null, array);
// 8

ECMAScript 和 javascript 的关系
ECMAScript 是一个语言标准,JavaScript 是该标准(最流行)的一个实现。

ES5、ES6、ES2015、ES7、ES2016、ES8、ES2017 和 ES.Next 的区别

(1)2009 年 12 月发布的 ECMAScript5(即 ES5,其中的 ES 是 ECMAScript 的简称)

(2)ECMAScript2015(ES2015)在 2015 年 6 月标准化。负责起草 ECMAScript 规范的委员会决定把定义新标准的模式改为每年更新一次,新的特性
一旦通过就加入标准。因此,ECMAScript 第六版更名为 ECMAScript2015(ES6)

架构型设计模式

架构型设计模式是一类框架结构,通过提供一些子系统,指定他们的职责,并将它们条理清晰地组织在一起。

同步模块模式

模块化:将复杂的系统分解成高内聚、低耦合的模块,使系统开发变得可控、可维护、可拓展,提高模块的复用率。
同步模块模式——SMD (Synchronous Module Definition):请求发出后,无论模块是否存在,立即执行后续的逻辑,实现模块开发中对模块的立即引用。

技巧型设计模式

技巧型设计模式是通过一些特定技巧来解决组件的某些方面的问题,这类技巧一般通过实践经验总结得到。

链模式

链模式(Operate of Responsibility):通过在对象方法中将当前对象返回,实现对同一个对象多个方法的链式调用。从而简化对该对象的多个方法的多次调用时,对该对象的多次引用。

行为型设计模式

行为型设计模式用于不同对象之间职责划分或算法抽象,行为型设计模式不仅仅涉及类和对象,还涉及类或对象之间的交流模式并加以实现

模板方法模式

模板方法模式(Template Method):父类中定义一组操作算法骨架,而将一些实现步骤延迟到子类中,使得子类可以不改变父类的算法结构的同时可重新定义算法中某些实现步骤。

多用于归一化组件

结构型设计模式

结构型设计模式关注于如何将类或对象组合成更大、更复杂的结构,以简化设计

外观模式

外观模式(Facade):为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统接口的访问更容易。在JavaScript中有时也会用于对底层结构兼容性做统一封装来简化用户使用

Object获取原型对象:Object.getPrototypeOf

Object.getPrototypeOf用于获取指定对象的原型对象

1
Object.getPrototypeOf(obj);

参数
obj: 参数为要获取原型对象的对象
返回值
返回指定对象的原型对象或null
注意:
es5中,如果参数不是对象,会抛出TypeError错误
es6中,如果参数不是对象,会强制类型转换为对象

基于条件设置对象属性
1
2
3
4
5
6
7
8
// 空值
const name = '';
const obj = { ...name && {name}};
console.log(obj); // {}
// 非空值
const name = 'test_name';
const obj = { ...name && {name}};
console.log(obj); // { name: 'test_name'}