优雅编程:JavaScript代码优化常见的3个小技巧

简介: 在代码Review过程中,享受让代码变得优雅是一件很有成就感的事情,本文总结了项目开发中常见的3个代码优化的技巧,这些技巧在VUE项目中有比较多的使用场景,不妨尝试去编写出高质量的代码。

image.png在代码Review过程中,享受让代码变得优雅是一件很有成就感的事情,本文总结了项目开发中常见的3个代码优化的技巧,这些技巧在VUE项目中有比较多的使用场景,不妨尝试去编写出高质量的代码。


神奇的扩展运算符


扩展运算符是我比较喜欢的JavaScript操作符,常用于数组、对象的操作。常用的场景有以下四个:

需要注意的点:扩展运算符的拷贝属于一层拷贝。

1.复制数组

const weeks = ["Monday", "Tuesday"];
const newWeeks = [...weeks];
console.log(newWeeks);  // [ 'Monday', 'Tuesday' ]

2.扩展数组

const weeks = ["Tuesday", "Wednesday"];
const newWeeks = ["Monday", ...weeks, "Thursday", "Friday"];
console.log(newWeeks);  // [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' ]

3.扩展对象

const myinfo = {
    name: "DevPoint",
    city: "Shenzhen",
};
const myDetail = {
    ...myinfo,
    province: "Guangdong",
};
console.log(myDetail); // { name: 'DevPoint', city: 'Shenzhen', province: 'Guangdong' }

4. 数组/对象合并

const weeks1 = ["Monday", "Thursday", "Friday"];
const weeks2 = ["Tuesday", "Wednesday"];
const newWeeks = [...weeks1, ...weeks2];
console.log(newWeeks); // [ 'Monday', 'Thursday', 'Friday', 'Tuesday', 'Wednesday' ]
const myinfo = {
    name: "DevPoint",
};
const address = {
    province: "Guangdong",
    city: "Shenzhen",
};
const myDetail = {
    ...myinfo,
    ...address,
};
console.log(myDetail); // { name: 'DevPoint', province: 'Guangdong', city: 'Shenzhen' }

null 检查的最佳方法

null 值检查是前端项目中比较常见的操作,在过去的语法中我们是这样进行检查:

if (tmp !== null && tmp !== undefined && tmp !=="") {
    //
}

现在一个简单的if就可以实现:

if (tmp) {
    //
}

如果tmp为空值则条件为falseif的条件为true的情况包括:nullundefinedNaN、空字符串、0false

之前在《24个Javascript代码优化技巧》介绍过空值的检查方法,最新 Javascript 语法新增了空值合并运算符??确实有一个很好的快捷方式来实现这个功能。在 《Javascript代码优化的15个小知识》文中也介绍了:如何在JavaScript中检查空字符串/undefined/null。


使用 .map()、.reduce()、.filter()


是的,我们经常讨论函数式和响应式编程的强大技术!几年前第一次接触函数式编程的时候,为我打开了一扇全新的门。现在,每当看到这些简单的说明,会被它优雅的代码风格所震撼。《javascript数组之includes、reduce》介绍了reduce的详细用法。

函数式编程的基本原理之一是使用列表和操作,本文将用三个最著名的操作:mapreducefilter来重构代码的例子。

在Covid-19之前,一个日本家庭来巴黎度假。他们在超市买了些食物和日用品。但是所有的物品都是欧元标价,他们想知道每一件物品的价格以及换算成日元的价格。

以汇率 1欧元等于126日元来计算。

所以,按照传统的方式,将用一个经典的循环来做:

const RATE = 126;
const items = [
    { name: "pineapple", price: 2, type: "food" },
    { name: "beef", price: 20, type: "food" },
    { name: "advocate", price: 1, type: "food" },
    { name: "shampoo", price: 5, type: "other" },
];
let sum = 0;
const itemsInYen = [];
const length = items.length;
for (let i = 0; i < length; i++) {
    const item = items[i];
    item.price *= RATE;
    itemsInYen.push(item);
    if (item.type === "food") {
        sum += item.price;
    }
}
console.log(itemsInYen);
console.log(sum); // 2898

输出的结果如下:

[
  { name: 'pineapple', price: 252, type: 'food' },
  { name: 'beef', price: 2520, type: 'food' },
  { name: 'advocate', price: 126, type: 'food' },
  { name: 'shampoo', price: 630, type: 'other' }
]
2898

现在我们利用.map()、.reduce()、.filter()对上述代码进行重构:

const RATE = 126;
const items = [
    { name: "pineapple", price: 2, type: "food" },
    { name: "beef", price: 20, type: "food" },
    { name: "advocate", price: 1, type: "food" },
    { name: "shampoo", price: 5, type: "other" },
];
const itemsInYen = items.map((item) => {
    const itemsInYen = { ...item };
    itemsInYen.price *= RATE;
    return itemsInYen;
});
console.log(itemsInYen);
const sum = itemsInYen
    .filter((item) => item.type === "food")
    .reduce((total, item) => (total += item.price), 0);
console.log(sum);

上述输出结果一致。map 将所有价格从欧元转换为日元,filter 过滤非食品的消费项,reduce 将每个食品项目的价格添加到总金额中!


相关文章
|
3月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
5月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
159 1
|
6月前
|
JavaScript 前端开发
怀孕b超单子在线制作,p图一键生成怀孕,JS代码装逼娱乐
模拟B超单的视觉效果,包含随机生成的胎儿图像、医疗文本信息和医院标志。请注意这仅用于前端开发学习
|
8月前
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
233 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
6月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
117 0
|
8月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
743 9
|
9月前
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
655 11
|
9月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
9月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~