应该学会的20个JavaScript代码写法

83 阅读3分钟

01. IntersectionObserver实现滚动效果

当元素滚动到可视区之后,给元素添加一个动画

代码如下:

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('fade-in');
      observer.unobserve(entry.target);
    }
  });
});

const elements = document.querySelectorAll('.animate');
elements.forEach(element => observer.observe(element));

02. 代理的使用

代理如何使用,相信大家都会,下面这段代码我也演示了

代码如下:

const handler = {
  get(target, prop) {
    if (prop === "name1") {
      return "world";
    }
    return Reflect.get(...arguments);
  }
};

const proxy = new Proxy({ name1: 'lice', name2: 'Alice' }, handler);
console.log(proxy.name1, proxy.name2); // 输出: wold Alice

03. ES6模块化

模块化导出,是JS代码必备技能

代码如下:

// math.js
export function add(a, b) {
  return a + b;
}

// app.js
import { add } from './math.js';
console.log(add(2, 3)); // 输出: 5

04. 缓存提速

用过的数据,进行缓存,下次在循环使用,想到递归了吗?

代码如下:

function fibonacci(n, memo = {}) {
  if (n in memo) return memo[n];
  if (n <= 2) return 1;
  memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
  return memo[n];
}

console.log(fibonacci(10)); // 输出: 55

05. 闭包创建私有变量

写过闭包的同学都知道,闭包的其中一个作用就是保护变量

代码如下:

function createCounter() {
  let count = 0;
  return function () {
    count++;
    console.log(count);
  };
}

const counter = createCounter();
counter(); // 输出: 1
counter(); // 输出: 2

06. 使用async和await处理异步

最简洁处理异步变同步的方式就是async/await

代码如下:

async function fetchData() {
  try {
    const response = await fetch('url');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

fetchData();

07. Console输出技巧

debugger的时候,更友好的信息输出,会提升我们效率

代码如下:

const users = [{ name: 'Alice' }, { name: 'Bob' }];
console.table(users);
console.groupCollapsed('Details');
console.log('Name: Alice');
console.log('Age: 30');
console.groupEnd();

08. JSON.parse转换数据

在转化JSON数据时,同时可以将数据处理成你想要的样子

代码如下:

const data = '{"age":"30"}';
const parsed = JSON.parse(data, (key, value) => {
  if (key === 'age') return Number(value);
  return value;
});
console.log(parsed.age); // 输出: 30

09. 善于使用正则匹配

正则表达式的强大之处,大家都应该知道,我们需要善于使用正则表达式帮我们解决问题

代码如下:

const text = 'Hello, world!';
const pattern = /Hello/g;
console.log(text.match(pattern)); // 输出: ['Hello']

10. 可选链处理未定义的值

可选链处理未定义的值,是处理ifelse多嵌套的方式之一,也是最简洁的方式之一

代码如下:

const user = { info: { name: 'Alice' } };
console.log(user.info?.age); // 输出: undefined

11. NaN更安全判断

变量类型判断越准确,代码安全性越高

代码如下:

const notANumber = 'Not a number';
console.log(Number.isNaN(notANumber)); // 输出: false

12. 字符串拼接

ES6给出字符串拼接优雅的处理方式${}

代码如下:

const name = 'Alice';
const greeting = `Hello, ${name}!`;
console.log(greeting); // 输出: Hello, Alice!

13. 动态属性名称

给对象设置动态属性名称,也是我们日常代码里经常碰到的问题

代码如下:

const key = 'name';
const person = { [key]: 'Alice' };
console.log(person.name); // 输出: Alice

14. 处理多个Promises

同时处理多个Promises的方式,是使用Promise.all

代码如下:

const promise1 = fetch('url1');
const promise2 = fetch('url2');
Promise.all([promise1, promise2])
  .then(responses => console.log(responses))
  .catch(error => console.error(error));

15. 简单且强大的箭头函数

箭头函数 ( () => {}) 不仅简洁,而且还保留this值

代码如下:

const greet = name => `Hello, ${name}!`;
console.log(greet('Alice')); // 输出: Hello, Alice!

16. 封装延迟执行功能

使用setTimeout封装一个延迟操作函数

代码如下:

function delayedLog(message, time) {
  setTimeout(() => {
    console.log(message);
  }, time);
}
delayedLog('Hello', 1000); // 输出 (after 1 second): Hello

17. 短路判断

使用&&和||创建清晰简洁的条件语句

代码如下:

const name = user.name || 'Guest';
console.log(name); // 输出: Guest

18. 数据转换

map()方法是转换数据的最好方式

代码如下:

const numbers = [1, 2, 3];
const squared = numbers.map(num => num * num);
console.log(squared); // 输出: [1, 4, 9]

19. 扩容操作操作

不管是对象还是数组,都可以使用扩展符来进行数据添加

代码如下:

const originalArray = [1, 2, 3];
const clonedArray = [...originalArray];
console.log(clonedArray); // 输出: [1, 2, 3]

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const merged = { ...obj1, ...obj2 };
console.log(merged); // 输出: { a: 1, b: 3, c: 4 }

20. 解构提值

解构允许您轻松地从数组或对象中获取值

代码如下:

const person = { name: 'Alice', age: 30 };
const { name, age } = person;
console.log(name); // 输出:Alice
console.log(age); // 输出:30