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 });
};


目录
相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
923 150
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1658 8
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
614 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
582 15
|
9天前
|
人工智能 自然语言处理 API
Next AI Draw.io:当AI遇见Draw.io图表绘制
Next AI Draw.io 是一款融合AI与图表绘制的开源工具,基于Next.js实现,支持自然语言生成架构图、流程图等专业图表。集成多款主流大模型,提供智能绘图、图像识别优化、版本管理等功能,部署简单,安全可控,助力技术文档与系统设计高效创作。
668 151