汇总 JavaScript 的 let/const、解构赋值、箭头函数、Promise 与 async、数组方法和可选链写法,每条都带示例,适合前端开发中随时核对语法细节。
let 与 const
常量声明的绑定不能重新赋值,变量声明用于需要改值的场景,两者都是块级作用域,也不存在变量提升带来的怪异行为。默认先写常量声明,确实要重新赋值时再换成变量声明,能少踩很多坑。
const host = "127.0.0.1";
解构
数组按位置取值、对象按属性名取值,都能给默认值;剩余运算符把没取到的属性收进新对象,处理配置参数时特别方便,函数入参也支持同样的写法,不必再逐个读取属性字段。
const [a, , c] = [1, 2];
箭头函数
省略函数关键字,单行表达式可以隐式返回。箭头函数没有自己的上下文对象,适合做回调,但不能拿来当构造函数使用,也没有参数对象,需要剩余参数时用三个点收集,别和普通函数混用。
const add = (x, y) => x + y;
Promise 与 async
异步函数返回承诺对象,等待表达式负责拆箱;并行请求交给全完成方法,失败用捕获语句接住,别让未捕获的拒绝静默丢失。串行地一个个等待会白白拉长总耗时,能并行就别排队等待。
const p = Promise.resolve(1);
数组方法
映射、过滤、归约都返回新数组或聚合值,不改动原数组,可链式组合;查找返回首个匹配元素,找不到时给未定义值,判断是否存在用存在性方法更贴切,别把查找结果直接当布尔值用。
const t = [1, 2].map(n => n * 2);
可选链与空值合并
可选链读取不存在的属性不会抛错,空值合并只在值为空或未定义时取默认值,不会误伤数字零和空字符串,比逻辑或更精确。方法调用同样能加问号,避免先判空再执行。
console.log(cfg?.db?.port ?? 3306);