【建议收藏】🔥 JS 的实用技巧和注意事项!

大家好,我是 前端架构师 - 大卫

更多优质内容请关注微信公众号 @前端大卫

初心为助前端人🚀,进阶路上共星辰✨,

您的点赞👍与关注❤️,是我笔耕不辍的灯💡。

背景

本篇文章整理了一些常见的 JavaScript 语法优化技巧,并标注了每个特性的 ECMAScript 版本,以帮助开发者更好地理解和应用这些特性。

1. 多次解构拿到最终属性值

ES6 (2015) 引入了解构赋值。

js 复制代码
const obj = {
  part: {
    name: "David",
    age: 37
  }
};

const {
  part,
  part: { name, age }
} = obj;

console.log(part); // { name: "David", age: 37 }
console.log(name, age); // David 37

2. 模版字符串当作函数参数

ES6 (2015) 引入了模板字符串(Template literals

ts 复制代码
function getPersonInfo(template: TemplateStringsArray, person: string, age: number) {
  console.log(template); // ["", " is ", " years old"]
  console.log(person); // Lydia
  console.log(age); // 21
}

const person = "Lydia";
const age = 21;
getPersonInfo`${person} is ${age} years old`;

3. 解构字符串

ES6 (2015) 引入了扩展运算符(Spread operator

js 复制代码
[...'Lydia']; // ["L", "y", "d", "i", "a"]

4. 生成随机字符串

  • ES6 (2015) 引入 toString(36) 进制转换
  • ES8 (2017) 引入padEnd

代码解析:

  • Math.random() 生成随机数 0.6142088877102427
  • toString(36) 转换成36进制 0.m40j2pdqw8o
  • substr(2, 2+8) 进行字符串截取。
  • padEnd 末尾补 0
js 复制代码
const generatorRandomString = (length) => {
  return Math.random()
    .toString(36)
    .slice(2, 2 + length)
    .padEnd(length, "0");
};

generatorRandomString(8); // 'm40j2pdq'

5. 数字分隔符

ES12 (2021) 引入数字分隔符

js 复制代码
const myMoney = 1_000_000_000_000;

// 等价于
const myMoney = 1000000000000;

6. while 简写循环

js 复制代码
let i = 0;
while (i < 3) {
  i++;
  console.log(i);
}

// 简写
let i = 0;
while (i++ < 3) {
  console.log(i);
}

7. Array.includes 判断多个 if 条件

ES7 (2016) 引入 includes

js 复制代码
if (x === "abc" || x === "def" || x === "ghi") {
  // logic
}

// 简写
if (["abc", "def", "ghi"].includes(x)) {
  // logic
}

8. 字符串转数字

js 复制代码
parseInt("32");

// 简写
"32" * 1;
+"32";

9. 数组去重

ES6 (2015) 引入 Set

js 复制代码
const uniqueArray = (arr) => [...new Set(arr)];

10. 快速幂运算

ES7 (2016) 引入 ** 运算符

js 复制代码
Math.pow(2, 3); // 8

// 简写
2 ** 3;

11. 交换变量值

ES6 (2015) 引入解构赋值

js 复制代码
let a = 1, b = 2;
let temp = a;
a = b;
b = temp;

// 简写
let a = 1, b = 2;
[a, b] = [b, a];

12. 判断一个元素是否能在数组里找到

ES7 (2016) 引入 includes

js 复制代码
const arr = [0, 1];
arr.includes(0); // true

错误写法如下, 因为 0 在 js 里是 false

js 复制代码
const arr = [0, 1];
const foundNumber = arr.find(item=>item===0);
if(foundNumber){
    console.log('找到了');
}

注: JS 里的假值还有 undefined, null, NaN, 0, '', false

13. 三元运算符简化条件判断

js 复制代码
let result;
if(condition){
    result = 'yes';
}else{
    result = 'no';
}

// 简写
const result = condition ? 'yes' : 'no';

14. switch 语句优化成用字典的形式

js 复制代码
function getDayName(day) {
  switch (day) {
    case 1: return "Monday";
    case 2: return "Tuesday";
    case 3: return "Wednesday";
    case 4: return "Thursday";
    case 5: return "Friday";
    case 6: return "Saturday";
    case 7: return "Sunday";
    default: return "Invalid day";
  }
}

// 简写
function getDayName(day) {
  const days = {
    1: "Monday",
    2: "Tuesday",
    3: "Wednesday",
    4: "Thursday",
    5: "Friday",
    6: "Saturday",
    7: "Sunday",
  };
  return days[day] || "Invalid day";
}

15. 使用 filter 过滤数组中的所有假值

js 复制代码
const removeFalsy = (arr) => arr.filter(Boolean);

// 返回: [1, 2, 3, "a", "s", 34]
removeFalsy([0, 1, false, 2, "", 3, "a", NaN, "s", 34]);

16. 强制参数,缺失报错

ES6 (2015) 可使用默认参数

js 复制代码
function required(param) {
  throw new Error(`${param} is required`);
}

function example(value = required("value")) {
  console.log(value);
}

example(); // 抛出错误 "value is required"

总结

本篇文章介绍了 JavaScript 在不同版本 ECMAScript 规范中引入的常用特性,掌握这些特性可以让开发者更高效地编写 JavaScript 代码,提高代码的可维护性。

最后点赞👍 + 关注➕ + 收藏❤️ = 学会了🎉。

相关推荐
知识分享小能手28 分钟前
Vue3 学习教程,从入门到精通,Axios 在 Vue 3 中的使用指南(37)
前端·javascript·vue.js·学习·typescript·vue·vue3
伍哥的传说1 小时前
Mitt 事件发射器完全指南:200字节的轻量级解决方案
vue.js·react.js·vue3·mitt·组件通信·事件管理·事件发射器
程序员码歌3 小时前
【零代码AI编程实战】AI灯塔导航-总结篇
android·前端·后端
用户21411832636024 小时前
免费玩转 AI 编程!Claude Code Router + Qwen3-Code 实战教程
前端
一枚小小程序员哈4 小时前
基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
vue.js·node.js·express
小小愿望5 小时前
前端无法获取响应头(如 Content-Disposition)的原因与解决方案
前端·后端
小小愿望5 小时前
项目启功需要添加SKIP_PREFLIGHT_CHECK=true该怎么办?
前端
烛阴5 小时前
精简之道:TypeScript 参数属性 (Parameter Properties) 详解
前端·javascript·typescript
海上彼尚6 小时前
使用 npm-run-all2 简化你的 npm 脚本工作流
前端·npm·node.js
开发者小天6 小时前
为什么 /deep/ 现在不推荐使用?
前端·javascript·node.js