发布于 2025-03-06 18 阅读
0

每个开发人员必须知道的 20 个 JavaScript 技巧

JavaScript是一种功能强大、灵活的语言,掌握一些很酷的技巧可以让你的代码更简洁、更快速、更高效。下面是 20 个实用的 JavaScript 技巧和窍门,你可以在实际应用中使用它们来增强你的开发过程。


1.一步解构并重命名

您可以在对象解构期间重命名变量,这在出现命名冲突时很有帮助。

const user = { name: 'Alice', age: 25 };
const { name: userName, age: userAge } = user;
console.log(userName); // Alice
console.log(userAge);  // 25

2.带有函数调用的可选链

可选链接可与函数一起使用,确保函数在被调用之前就已存在。

const user = {
  getName: () => 'Alice',
};
console.log(user.getName?.());   // Alice
console.log(user.getAge?.());    // undefined

3.使用||=运算符进行默认赋值

逻辑或赋值( )仅当变量为或或假值||=时才赋值。nullundefined0

let count;
count ||= 10;
console.log(count); // 10

4.使用扩展运算符将 NodeList 转换为数组

扩展运算符提供了一种将 a 转换NodeList为数组的快速方法。

const divs = document.querySelectorAll('div');
const divArray = [...divs];
console.log(Array.isArray(divArray)); // true

5.使用默认值解构数组/对象

在解构过程中分配默认值以避免undefined出现键丢失的情况。

const user = { name: 'Alice' };
const { name, age = 25 } = user;
console.log(age); // 25

6.从数组中删除假值

用于从数组中filter()删除falsy值(如0nullundefined, )。false

const arr = [0, 'hello', null, 42, false, 'world'];
const filtered = arr.filter(Boolean);
console.log(filtered); // ["hello", 42, "world"]

7.根据属性对对象数组进行排序

根据特定属性轻松对对象数组进行排序。

const users = [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 20 }];
users.sort((a, b) => a.age - b.age);
console.log(users); // [{ name: 'Bob', age: 20 }, { name: 'Alice', age: 25 }]

8.动态导入以实现延迟加载

动态导入允许您仅在需要时加载模块,从而减少初始加载时间。

const loadModule = async () => {
  const module = await import('./myModule.js');
  module.default(); // Calls the default export function
};
loadModule();

9.对象解构的默认参数

使用默认参数时,您还可以解构并为特定属性设置默认值。

function createUser({ name = 'Guest', age = 18 } = {}) {
  console.log(name, age);
}
createUser();               // Guest 18
createUser({ name: 'Alice' }); // Alice 18

10.用于Object.assign()浅拷贝

Object.assign()很方便进行浅复制对象而不改变原始对象。

const original = { a: 1, b: 2 };
const copy = Object.assign({}, original);
copy.a = 3;
console.log(original.a); // 1 (unchanged)

11.记忆函数以提高性能

记忆化根据参数缓存昂贵函数调用的结果,这对于计算量大的函数很有用。

const memoize = (fn) => {
  const cache = {};
  return (...args) => {
    const key = JSON.stringify(args);
    if (!cache[key]) {
      cache[key] = fn(...args);
    }
    return cache[key];
  };
};
const slowSquare = (n) => n * n;
const memoizedSquare = memoize(slowSquare);
console.log(memoizedSquare(4)); // 16 (cached on second call)

12.使用reduce分组数组项

reduce()可以根据属性对数组项进行分组,这在数据处理中经常需要。

const people = [
  { name: 'Alice', role: 'admin' },
  { name: 'Bob', role: 'user' },
  { name: 'Charlie', role: 'admin' },
];
const grouped = people.reduce((acc, person) => {
  (acc[person.role] = acc[person.role] || []).push(person);
  return acc;
}, {});
console.log(grouped);
// { admin: [{ name: 'Alice' }, { name: 'Charlie' }], user: [{ name: 'Bob' }] }

13.使用扁平化嵌套数组Array.flat(Infinity)

使用 可以轻松展平多层嵌套数组Array.flat(Infinity)

const nested = [1, [2, [3, [4]]]];
console.log(nested.flat(Infinity)); // [1, 2, 3, 4]

14.使用以下命令切换布尔值!

切换布尔值就像应用两次 NOT 运算符一样简单。

let isVisible = false;
isVisible = !isVisible;
console.log(isVisible); // true

15.使用合并多个数组concat()

concat()有助于在单个语句中合并多个数组。

const arr1 = [1, 2];
const arr2 = [3, 4];
const arr3 = [5, 6];
const merged = arr1.concat(arr2, arr3);
console.log(merged); // [1, 2, 3, 4, 5, 6]

16.使用and进行异步数组迭代for...ofawait

当遍历一系列承诺时,for...ofwithawait确保每个承诺在下一个承诺运行之前得到解决。

const fetchData = async () => {
  const urls = ['url1', 'url2'];
  for (const url of urls) {
    const response = await fetch(url);
    console.log(await response.json());
  }
};

17.快速获取数组中的最后一项

检索数组中的最后一项,无需知道长度。

const arr = [1, 2, 3, 4];
console.log(arr.at(-1)); // 4

18.用于Intl日期格式

Intl.DateTimeFormat提供了一种跨地区格式化日期的强大方法。

const date = new Date();
const formatted = new Intl.DateTimeFormat('en-GB', {
  dateStyle: 'full',
}).format(date);
console.log(formatted); // e.g., "Monday, 25 October 2021"

19.使用和模板字面量对数字进行舍入Math.round()

模板文字可以直接格式化四舍五入的数字。

const num = 3.14159;
console.log(`${Math.round(num * 100) / 100}`); // 3.14

20.使用以下方法将类数组对象转换为数组Array.from()

用于Array.from()将类似数组的对象(例如参数)转换为真实数组。

function example() {
  const argsArray = Array.from(arguments);
  console.log(argsArray);
}
example(1, 2, 3); // [1, 2, 3]

这些技巧都简化了 JavaScript 中常见的编码模式。将它们集成到您的工作流程中,以编写高效且富有表现力的代码。