ES6相关的一些使用技巧

简介: 记录日常开发ES6使用的一些技巧

1. 解构

1. 解构赋值设置默认值

解构赋值允许指定默认值,但是如果值为 null 是无法设定默认值的;通常出现在处理后台返回数据中,后台返回的数据中部分值为 null ,可以通过控制合并运算符?? 来设置默认值

ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效

// badconst { a=1, b=2 } = { a: 3, b: null };
console.log(a, b); // 输出的结果为:3 null,这里b并没有取到默认值2// goodconst { a, b } = { a: 3, b: null };
console.log(a??1, b??2); // 输出的结果为:3 2

2. 解构 undefinednull

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象,但是等号右边为 undefinednull 时无法转为对象,所以对他们进行解构赋值时,都会报错;所以需要短路解构一个空对象,防止报错

// badconstA=null;
const { a=1 } =A;
console.log(a); // Uncaught TypeError: Cannot read property 'a' of nullconstB=undefined;
const { b=1 } =B;
console.log(b); // Uncaught TypeError: Cannot read property 'b' of undefined// goodconstA=null;
const { a=1 } =A|| {};
console.log(a); // 1constB=undefined;
const { b=2 } =B|| {};
console.log(b); // 2

3. 匹配模式取值

// 对象的解构constobj= {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
};
// badconsta=obj.a;
constb=obj.b;
constc=obj.c;
constd=obj.d;
conste=obj.e;
// badconstf=obj.a+obj.d;
constg=obj.c+obj.e;
// goodconst { a, b, c, d, e } =obj;
constf=a+d;
constg=c+e;
// good// 如果解构取到的值不符合自己的要求,可以进行重命名const { a: a1 } =obj;
console.log(a1);// 1// 数组的解构constarr= [1, {a: 'a'}, 'b'];
// badconstarr0=arr[0];
constarr1=arr[1].a;
// goodconst [arr0, {a: arr1}] =arr;
console.log(arr0); // 1,console.log(arr1); // 'a'

2. 扩展运算符

1. 数据的合并

// 数组的合并consta= [1, 2, 3];
constb= [1, 5, 6];
// badconstc=a.concat(b);//[1, 2, 3, 1, 5, 6]// good// 合并并去重constc= [...newSet([...a,...b])]; // [1, 2, 3, 5, 6]// 对象的合并constobj1= {
a:1,
};
constobj1= {
b:1,
};
// badconstobj=Object.assgin({}, obj1, obj2); // {a: 1,b: 1}// goodconstobj= {...obj1,...obj2}; //{a: 1,b: 1}

3. 数组扩展方法

1. includes - 处理 if 语句

// badif(
type==1||type==2||type==3||type==4){
//...}
// goode constcondition= [1, 2, 3, 4];
if(condition.includes(type)){
//...}

2. find - 更精确的搜索

要注意区分 filter 的使用场景,filter更多的是过滤,且返回的是个数组,而 find返回的是一个精确的项

consta= [1, 2, 3, 4, 5];
// filter 过滤数组中出大于2的值 constresult=a.filter(item=>item>3); // [4, 5]// finde 找出数组中等于3的值constresult=a.find(item=>item===3); // 3

3. flat - 扁平化数组

flat() 接收一个整数参数,表示想要扁平化的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用 Infinity 关键字作为参数。

constdeps= {
'采购部': [1, 2, 3],
'人事部': [5, 8, 12],
'行政部': [5, 14, 79],
'运输部': [3, 64, 105],
};
// badletmember= [];
for (letitemindeps){
constvalue=deps[item];
if(Array.isArray(value)){
member= [...member, ...value]
    }
}
member= [...newSet(member)];
// goodletmember=Object.values(deps).flat(Infinity);

4. 新增运算符

1. 可选链操作符 ?. 容错取值

本质上,?.运算符相当于一种短路机制,只要不满足条件,就不再往下执行。

通常可以用来做容错处理,防止报错

// wrongconstfirstName=message.body.user.firstName||'default';
// badconstfirstName= (message&&message.body&&message.body.user&&message.body.user.firstName) ||'default';
// goodconstfirstName=message?.body?.user?.firstName||'default';

2. 空值合并运算符 ?? 处理输入框非空的判断

空值合并运算符的行为类似 || ,但是只有运算符左侧的值为 nullundefined 时,才会返回右侧的值

输入框非空判断

// badif(value!==null&&value!==undefined&&value!==''){
//...}
// goodif(value??''!==''){
//...}

5. async 函数

1. 处理地狱回调

constfn1= () => {
returnnewPromise((resolve, reject) => {
setTimeout(() => {
resolve(1);
  }, 300);
 });
};
constfn2= () => {
returnnewPromise((resolve, reject) => {
setTimeout(() => {
resolve(2);
  }, 600);
 });
};
// bad constfn= () => {
fn1().then((res1) => {
console.log(res1); // 1fn2().then((res2) => {
console.log(res2);
  });
 });
};
// good constfn=async () => {
constres1=awaitfn1();
constres2=awaitfn2();
console.log(res1); // 1console.log(res2); // 2};
// 处理并发请求// 等待所有请求完成constfn= () => {
Promise.all([fn1(), fn2()]).then((res) => {
console.log(res); // [1,2] });
};
// 只要其中一个异步函数处理完成constfn= () => {
Promise.race([fn1(), fn2()]).then((res) => {
console.log(res); // 1 });
};


目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
280 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
397 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
669 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
131 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1654 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
909 61