如何让前端项目代码变得简洁优雅?

简介: 本文由喵喵侠分享前端开发中的实用代码优化技巧,涵盖变量解构赋值、扩展运算符、三元运算符、可选链与空值合并运算符的优雅用法,以及数组遍历的简洁写法,帮助开发者写出更高效、易维护的代码。

目录

前言

你好,我是喵喵侠。在日常开发中,难免会见到一些不太好的代码,看的人脑壳疼。我今天就遇到了好几处烂代码,发现有些代码是从别的项目拷贝过来的,有些则是一些人没有好的书写代码的习惯,亦或是不知道怎么样用简洁优雅的方式来书写代码。

接下来,我会结合我的实际开发经验,来为你讲述如何避免写过于冗长的代码,以及什么样的代码实现方式才是更好的。

实战案例

废话不多说,直接上案例!

变量解构赋值和扩展运算符的运用

变量的取值和赋值,这个操作想必我们每天都在做。

假设有这么一个需求,页面上有一个列表,每一行最后一列有一个查看按钮,点击查看会出现一个弹窗,弹窗需要显示列表里面的数据。

这样的需求很普遍,列表往往只能展示最基础的简略数据,而弹窗可以显示更多更详细的数据,比方说备注、详情之类的。

现在每一行的后端返回的数据rowData假设是这样的:

{id: 1, name: '喵喵侠',age: 18, remark: '前端开发'}

那么页面上需要的字段,假设我们预先写好了只要姓名、年龄、职业,我们这时候需要用一个弹窗详情对象变量detailData,来把列表rowData里面的特定项,赋值给detailData

很多人可能会这样写:

// bad
detailData.name = rowData.name
detailData.age = rowData.age
detailData.job = rowData.remark

这里只有三项感觉也还好,可如果有10个呢?20个呢?是不是就得这么多行代码呢?

更好的做法是使用变量解构赋值,写法如下:

// good
 const { name, age, remark: job } = rowData
 detailData = {...detailData, name, age, job }

这样写只需要大概两行,就能完成赋值操作。解构赋值有个小技巧,那就是可以设置别名,原来的对象属性名跟你的目标名不一样不要紧,用remark: job冒号这样的形式就可以重命名啦。

巧用三元运算符替代简单的条件判断

我们经常会用到if else这样的判断,判断条件只有两个,且每个条件里面只有一行语句执行时,完全可以用三元运算符来替代if else,这样可以让代码更加简洁。下面我举一个例子你就明白了。

假设我们有一个需求,根据用户的权限设置按钮的可见性:

// bad
let buttonVisibility
if (user.isAdmin) {
  buttonVisibility = true
} else {
  buttonVisibility = false
}

用三元运算符优化一下,代码是这样的:

// good
const buttonVisibility = user.isAdmin ? true : false

可以很明显的看出,通过使用三元运算符,代码变得更加简洁明了。原本要4行代码,现在一行就可以搞定了。

其实聪明的你可以看出来,这个代码还可以进一步优化成下面这样:

// perfect!
const buttonVisibility = !!user.isAdmin

为什么不要三元呢,因为三元判断的条件本身就是一个布尔值,而这里需要的返回正好是布尔值,所以判断显得多此一举。如果user.isAdmin不是布尔值是字符串,用两个感叹号!!强制转换成布尔值就好了;如果本身就是布尔值,则不需要转换。

善用可选链运算符、空值合并运算符做空值判断

假设我们有一个需求,检查一个变量是否为空,如果为空则赋值默认值,这个需求也是非常常见。

在处理可能为空的变量时,按照传统的写法,可能会显得冗长且重复,就像下面这样

// bad
let value;
if (inputValue !== null && inputValue !== undefined) {
  value = inputValue;
} else {
  value = defaultValue;
}

我们通过使用ES6的空值合并运算符(??),我们可以简化代码:

// good
const value = inputValue ?? defaultValue;

这种优化方式不仅简化了代码,还提高了可读性。

如果要判断一个对象的某个属性,是否是null或者undefined,可以结合可选链运算符(?.)空值合并运算符(??)来做判断:

// bad
const obj = { remark: '' }
let remark
if(obj && obj.remark){
  remark = obj.remark
}else{
  remark = '这个人太懒啦,什么也没留下'
}
// great
const obj = { remark: '' }
let remark
remark = obj?.remark ?? '这个人太懒啦,什么也没留下'

简单说一下,可选链后面的属性,如果存在返回这个存在的值,如果不存在,则返回undefined。

而双问号表示前面的值如果是null或者undefined,就取后面的值;否则取前面的值。

可选链运算符、空值合并运算符这两个都非常好用,感兴趣的话,可以看看MDN官方文档:

可选链运算符(?.) - JavaScript | MDN

空值合并运算符(??) - JavaScript | MDN

数组的遍历

在前端开发中,遍历数组和对象是常见操作。使用更简洁高效的遍历方法,可以提高代码的可读性和性能。

假设我们有一个需求,需要遍历一个数组并对每个元素进行操作,假设processItem是一个方法,需要把一个数组里面的每一项作为参数,传递给这个函数调用:

// bad
for (let i = 0; i < items.length; i++) {
  processItem(items[i]);
}

优化后,我们可以使用forEach方法:

// great
items.forEach(item => processItem(item));

使用forEach方法后,代码变得更加简洁,同时避免了传统for循环中的索引管理问题。

这个相信很多前端都会,但是需要注意,forEach有可能会改变原数组。如果想要不改变原数组,获得新的数组,可以选中map方法。

另外filtersomeeveryreduce都是很好用的数组方法,可以根据实际需要用起来。

结语

通过对代码进行优化,我们可以显著提升代码的可读性和维护性,同时也能提高代码执行效率。本文实际案例,展示了如何优化前端代码。希望这些技巧对你的前端开发工作有所帮助。如果你有更多的优化技巧或经验,欢迎与我分享交流。

目录
相关文章
|
3月前
|
前端开发 JavaScript 定位技术
前端表单输入框自动填充和覆盖逻辑的实现
本文介绍Web开发中表单联动的实现方案,针对输入框与下拉框的数据填充需求,提出两种解决思路:一是通过比对选项label判断是否覆盖,二是监听用户输入行为设置flag开关。结合Vue与Element-UI实战代码,详解如何智能控制数据填充逻辑,避免覆盖用户手动输入内容,提升表单交互体验。
275 0
前端表单输入框自动填充和覆盖逻辑的实现
|
3月前
|
前端开发 开发者 容器
如何解决 flex 布局下子元素 width 宽度设置失效的问题
本文通过实际案例,探讨前端开发中flex布局导致子元素宽度设置失效的问题,分析原因并提供两种解决方案:去除flex布局(不推荐)和设置min-width(推荐),帮助开发者深入理解flex特性,提升布局控制能力。
273 0
如何解决 flex 布局下子元素 width 宽度设置失效的问题
【Echarts】封装几个酷炫(发光)图表
【Echarts】封装几个酷炫(发光)图表
【Echarts】封装几个酷炫(发光)图表
|
3月前
|
JavaScript 前端开发 数据可视化
如何优雅地处理Echarts环形图中的小数显示?
本文介绍了在数据可视化中处理数字格式的三种方法,重点解决保留两位小数并去除末尾多余0的问题。通过字符串操作、正则表达式和Number类型转换,实现简洁高效的数字格式化,推荐使用Number方法最优。
231 0
|
3月前
|
JavaScript 前端开发 iOS开发
NVS:一款简洁高效的 Node.js 版本管理工具
本文由前端开发者喵喵侠分享,介绍轻量级Node.js版本管理工具nvs的使用方法。涵盖Windows安装、常用命令(如add、link、use、ls、rm)、全局与局部版本切换技巧,并详细说明macOS下卸载nvs的完整步骤。相比nvm,nvs在Windows上体验更稳定,操作简洁高效,适合多项目开发场景。
402 1
|
3月前
|
文字识别 程序员 数据安全/隐私保护
macOS 上值得推荐的软件(第一弹)
本文推荐三款提升macOS使用效率的优质软件:Longshot(支持滚动截图的截图工具)、Mos(优化鼠标平滑滚动与方向设置)、NetNewsWire(免费开源RSS阅读器)。涵盖截图、系统操作与信息获取场景,助力程序员高效工作。无广告,可免费试用,欢迎体验与分享。
325 0
macOS 上值得推荐的软件(第一弹)
|
3月前
|
缓存 JavaScript 前端开发
Vue的生命周期详解及业务场景应用
本文详细介绍Vue.js的生命周期概念及各阶段钩子函数的作用,结合实际业务场景讲解如何合理使用created、mounted、updated等钩子进行数据初始化、DOM操作、资源清理等,帮助开发者提升组件管理能力与代码性能。
169 0
Vue的生命周期详解及业务场景应用
|
3月前
|
文字识别 开发者 Windows
Windows 上值得推荐的软件(第一弹)
本文推荐两款提升Windows使用效率的神器:Listary,实现文件快速搜索与路径跳转;uTools,集快捷启动、剪贴板智能识别与丰富插件于一体,助力高效办公。
266 0
Windows 上值得推荐的软件(第一弹)
|
3月前
|
JavaScript 前端开发 Apache
如何用vue-echarts实现面积图?
本文介绍如何使用 Vue-Echarts 封装面积图组件,涵盖实现效果、思路及完整代码。通过配置 `areaStyle` 实现填充区域,并支持多条数据曲线与颜色自动循环,提升开发效率。附详细代码与配置说明,适合前端开发者参考学习。
205 0
|
3月前
|
存储 安全 前端开发
浅谈前端安全领域的XSS攻击
本文由喵喵侠撰写,介绍前端安全中的XSS(跨站脚本攻击)基本概念与防范。涵盖反射型、存储型和DOM型XSS原理,并通过一个留言板案例演示攻击过程。文章还提供防御建议,如避免使用innerHTML、采用DOMPurify过滤恶意脚本,帮助开发者提升安全意识,防范常见前端漏洞。
206 0