当前位置: 首页 > article >正文

JavaScript 小技巧和诀窍:助你写出更简洁高效的代码

JavaScript 是一门灵活且强大的语言,但精通它并非易事。以下 30 个 JavaScript 小技巧和诀窍,可以帮助每位开发者写出更简洁高效的代码,并提升开发流程。

1. 使用 let 和 const 替代 var

避免使用 var 声明变量。使用 let 和 const 来确保块级作用域,并避免变量提升带来的问题。

示例:

let name = 'John';
const age = 30;

2. 解构赋值

解构赋值允许你将数组中的值或对象中的属性提取到不同的变量中。

示例:

const person = { name: 'Jane', age: 25 };
const { name, age } = person;

const numbers = [1, 2, 3];
const [first, second] = numbers;

3. 模板字面量

模板字面量提供了一种简单的方法,将变量和表达式插入到字符串中。

示例:

const name = 'John';
const greeting = `Hello, ${name}!`;

4. 默认参数

为函数参数设置默认值,以避免出现 undefined 错误。

示例:

function greet(name = 'Guest') {
  return `Hello, ${name}!`;
}

5. 箭头函数

箭头函数提供简洁的语法,并按词法绑定 this 值。

示例:

const add = (a, b) => a + b;

6. 展开运算符 

展开运算符允许你展开可迭代对象(如数组)的元素或对象的属性。

示例:

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];

const obj1 = { name: 'John' };
const obj2 = { ...obj1, age: 30 };

7.  剩余参数 

剩余参数允许你将任意数量的参数表示为一个数组。

示例:


function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}

8. 短路求值 && 和 ||

使用短路求值进行条件表达式和默认值赋值。

示例:

nst user = { name: 'John' };
const name = user.name || 'Guest';

const isAdmin = user.isAdmin && 'Admin';

9. 对象属性简写

当属性名和变量名相同时,可以使用简写语法来创建对象。

示例:

const name = 'John';
const age = 30;
const person = { name, age };

10. 可选链 ?.

可选链允许你在安全地访问深层嵌套属性时,无需检查每个引用是否有效。

示例:

const user = { name: 'John', address: { city: 'New York' } };
const city = user.address?.city;

11. 空值合并运算符 ??

空值合并运算符 ?? 在左侧操作数为 null 或 undefined 时,返回右侧操作数。

示例:

const user = { name: 'John' };
const name = user.name ?? 'Guest';

12. 数组方法:map()filter()reduce()

使用 map()filter() 和 reduce() 等数组方法,以函数式编程的方式对数组进行常见操作。

示例:

const numbers = [1, 2, 3, 4, 5];

const doubled = numbers.map(num => num * 2);
const evens = numbers.filter(num => num % 2 === 0);
const sum = numbers.reduce((total, num) => total + num, 0);

13. Promise 链式调用和异步/等待

使用 Promise 和 async/await 语法处理异步操作,使代码更简洁易读。

使用 Promise 示例:

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

使用 Async/Await 示例:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

14. 防抖和节流

通过防抖和节流优化性能,例如在滚动或调整大小事件中频繁调用的函数。

防抖示例:

function debounce(func, delay) {
  let timeoutId;
  return function(...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(this, args), delay);
  };
}

window.addEventListener('resize', debounce(() => {
  console.log('Resized');
}, 300));

节流示例:

function throttle(func, limit) {
  let inThrottle;
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}

window.addEventListener('scroll', throttle(() => {
  console.log('Scrolled');
}, 300));

15. 使用 for…of 循环进行迭代

使用 for…of 循环更清晰地遍历数组、字符串和其他可迭代对象。

示例:

const numbers = [1, 2, 3, 4, 5];

for (const number of numbers) {
  console.log(number);
}

16. 克隆对象和数组

使用展开运算符或 Object.assign() 来克隆对象和数组。

示例:

const original = { name: 'John', age: 30 };
const clone = { ...original };

const arr = [1, 2, 3];
const arrClone = [...arr];

17. 动态属性名

使用计算属性名来动态设置对象属性。

示例:

const propName = 'age';
const person = {
  name: 'John',
  [propName]: 30
};

18. 使用 setTimeout 和 setInterval

使用 setTimeout 和 setInterval 来安排代码执行。

示例:

setTimeout(() => {
  console.log('This runs after 2 seconds');
}, 2000);

const intervalId = setInterval(() => {
  console.log('This runs every 3 seconds');
}, 3000);

// 清除 interval
clearInterval(intervalId);

19. 字符串方法:includes()startsWith()endsWith()

使用现代字符串方法进行常见的字符串操作。

示例:

const str = 'Hello, World!';

console.log(str.includes('World')); // true
console.log(str.startsWith('Hello')); // true
console.log(str.endsWith('!')); // true

20. 有效地使用 console 进行调试

利用各种 console 方法来更有效地进行调试。

示例:

console.log('Simple log');
console.warn('This is a warning');
console.error('This is an error');
console.table([{ name: 'John', age: 30 }, { name: 'Jane', age: 25 }]);
console.group('Group');
console.log('Message 1');
console.log('Message 2');
console.groupEnd();

21. 使用 Array.isArray() 检查数组

使用 Array.isArray() 方法来确定一个变量是否为数组。

示例:

const arr = [1, 2, 3];
const obj = { name: 'John' };

console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false

22. 使用 Object.keys() 和 Object.values() 获取对象键值

使用 Object.keys() 获取对象的所有键名,使用 Object.values() 获取对象的所有值。

示例:

const person = { name: 'John', age: 30 };

console.log(Object.keys(person)); // ['name', 'age']
console.log(Object.values(person)); // ['John', 30]

23. 使用 Object.entries() 将对象转换为键值对数组

使用 Object.entries() 将对象转换为一个包含键值对的数组。

示例:

const person = { name: 'John', age: 30 };

console.log(Object.entries(person)); // [['name', 'John'], ['age', 30]]

24. 使用 Object.freeze() 冻结对象

使用 Object.freeze() 方法冻结对象,使其不可修改。

示例:

const person = { name: 'John', age: 30 };
Object.freeze(person);

person.name = 'Jane'; // 不会修改对象

console.log(person.name); // 'John'

25. 使用 JSON.stringify() 和 JSON.parse() 解析 JSON 数据

使用 JSON.stringify() 将 JavaScript 对象转换为 JSON 字符串,使用 JSON.parse() 将 JSON 字符串转换为 JavaScript 对象。

示例:

const person = { name: 'John', age: 30 };
const jsonString = JSON.stringify(person);

console.log(jsonString); // '{"name":"John","age":30}'

const parsedObject = JSON.parse(jsonString);
console.log(parsedObject); // { name: 'John', age: 30 }

26. 使用 Date 对象处理日期和时间

使用 Date 对象来操作日期和时间。

示例:

const now = new Date();
console.log(now); // 当前时间

const date = new Date('2023-10-26');
console.log(date.getFullYear()); // 2023
console.log(date.getMonth()); // 9 (月份从 0 开始)
console.log(date.getDate()); // 26

27. 使用 Math 对象进行数学运算

使用 Math 对象进行各种数学运算。

示例:

console.log(Math.sqrt(9)); // 3
console.log(Math.abs(-5)); // 5
console.log(Math.round(3.7)); // 4
console.log(Math.max(1, 2, 3)); // 3

28. 使用 parseInt() 和 parseFloat() 解析字符串为数字

使用 parseInt() 解析字符串为整数,使用 parseFloat() 解析字符串为浮点数。

示例:

console.log(parseInt('123')); // 123
console.log(parseFloat('3.14')); // 3.14

29. 使用 typeof 运算符获取变量类型

使用 typeof 运算符来确定一个变量的类型。

示例:

console.log(typeof 'hello'); // 'string'
console.log(typeof 123); // 'number'
console.log(typeof true); // 'boolean'
console.log(typeof {}); // 'object'

30. 使用 isNaN() 检查是否为 NaN

使用 isNaN() 检查一个值是否为 NaN(Not a Number)。

示例:

console.log(isNaN(NaN)); // true
console.log(isNaN('hello')); // true
console.log(isNaN(123)); // false

这些额外的技巧和诀窍可以帮助你更深入地理解 JavaScript 并编写更高效的代码。继续探索,不断学习,你会发现 JavaScript 的强大功能和无限可能。

最后,如果本文的内容对你有启发,欢迎点赞收藏关注,你的支持是我更新的动力。


http://www.kler.cn/a/354692.html

相关文章:

  • 你好,2025!JumpServer开启新十年
  • STM32-笔记37-吸烟室管控系统项目
  • C++和Python中负数取余结果的区别
  • 2025最新解决方案:新买的mac鼠标和这个触控板反向
  • SpringMVC的消息转换器
  • Eureka原理
  • Scale Decoupled Distillation 论文中SPP发生了什么
  • 一款AutoXJS现代化美观的日志模块AxpLogger
  • k8s-配置网络策略 NetworkPolicy
  • docker/docker-compose里面Command和entrypoint的关系
  • 股票Tick数据如何获取做量化交易
  • springboot如何接入阿里云短信
  • Vue 3 中的状态管理:深入探讨 Vuex 和 Pinia 的比较与最佳实践
  • 初识git · 有关模型
  • 【C语言】数据类型
  • 实用篇:如何让Win11右键默认显示更多呢
  • STM32 独立看门狗和窗口看门狗区别
  • Python进阶知识
  • 智能平台或系统中的归因、根因分析案例集锦
  • 使用python实现图书管理系统
  • Unity动画系统
  • 外包干了3周,技术退步太明显了。。。。。
  • 使用React Router实现前端的权限访问控制
  • 【Flutter】Dart:异步
  • docker容器里的时间不对,linux解决方案
  • 机器学习——向量化