JavaScript 进阶之道

Python 和 JavaScript 在笔者看来是很相似的语言,本文归纳了 JavaScript 的各种 tricks。

函数

箭头函数

函数的简化写法,配合 map、filter、reduce 等高阶函数实现函数式编程

// function foo(parameters){
//     return expression
// }
let foo = parameters => expression;

map - 映射

let numbers = [1, 2, 3, 4, 5];
numbers.map(e => e ** 2);
// [1, 4, 9, 16, 25]

filter - 过滤

let values = [null, undefined, NaN, 0, "", true, "alphardex", 666];
values.filter(e => e);
// [true, "alphardex", 666]

reduce - 归并

扩展运算符

数据结构的合并

函数参数的打包与解包

数据结构

数组

迭代

同时迭代元素与其索引

相当于 Python 的 enumerate

同时迭代 2 个以上的数组

相当于 Python 的 zip

测试是否整体/部分满足条件

every 测试所有元素是否都满足于某条件,some 则是测试部分元素是否满足于某条件

解构赋值

最典型的例子就是 2 数交换

用扩展运算符可以获取剩余的元素

对象

迭代

排序

缺失键处理

如果键不在字典中,返回一个默认值,类似 Python 的 dict.get

如果键不在字典中,将会添加它并设置一个默认值,类似 Python 的 dict.setdefault

语言专属特性

async

async 函数返回隐式的 Promise,是异步代码的理想的编写方式

假设定义了 3 个异步操作任务

顺序执行

并发执行

任务完成后执行某操作

Proxy

如果了解 Python 类的描述符特性,那么 Proxy 也会变得很好理解

在 Python 中, 类的描述符可以给类属性定义相同的存取行为

而 JS 的 Proxy 也差不多,也是给对象属性定义相同的存取行为(官方说是拦截读取操作,其实意思也差不多)

以下实现一个简单的 Proxy,用来在读写属性时验证属性的正确性

Last updated