Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

常用 40 个 JavaScript 技巧及应用案例

$
0
0

常用 40 个 JavaScript 技巧及应用案例

JavaScript 是一种功能强大的编程语言,广泛应用于前端开发中。掌握一些常用的技巧,可以帮助开发者提升代码效率和可读性。以下是 40 个实用的 JavaScript 技巧及应用案例:


1. 使用 constlet 替代 var

const x = 5;
let y = 10;

解释constlet 是 ES6 引入的变量声明方式,具有块级作用域,相比 var 更加安全。


2. 解构赋值

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

解释: 解构赋值允许从对象或数组中提取数据,简化代码。


3. 模板字符串

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

解释: 模板字符串用反引号(`)包裹,支持插入变量,避免了字符串拼接的繁琐。


4. 箭头函数

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

解释: 箭头函数提供了更简洁的函数声明方式,并且 this 绑定更加直观。


5. 数组去重

const numbers = [1, 2, 2, 3, 4, 4];
const uniqueNumbers = [...new Set(numbers)];

解释: 通过使用 Set 数据结构,可以轻松去除数组中的重复元素。


6. 数组遍历 (forEach 方法)

const numbers = [1, 2, 3];
numbers.forEach(num => console.log(num));

解释forEach 是一种数组遍历方式,适用于执行某些副作用操作。


7. 数组映射 (map 方法)

const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);

解释map 方法用于遍历数组,并返回一个新数组,通常用于数据转换。


8. 数组过滤 (filter 方法)

const numbers = [1, 2, 3, 4];
const evenNumbers = numbers.filter(num => num % 2 === 0);

解释filter 方法返回符合条件的数组元素。


9. 数组求和 (reduce 方法)

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);

解释reduce 方法可以将数组中的元素按某种方式合并或累加,适用于求和、求积等操作。


10. 异步操作 (async/await)

const fetchData = async () => {
  const response = await fetch('https://api.example.com');
  const data = await response.json();
  console.log(data);
};

解释async/await 使异步代码更像同步代码,增加了代码的可读性。


11. 解构函数参数

const greet = ({ name, age }) => console.log(`${name} is ${age} years old.`);

解释: 解构函数参数可以直接提取对象中的数据,减少代码冗余。


12. 扩展运算符 (...)

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

解释: 扩展运算符可以简便地合并数组或对象。


13. 对象合并 (Object.assign)

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2);

解释Object.assign 合并多个对象,并返回一个新对象。


14. 简化的 if 语句 (三元运算符)

const age = 18;
const status = age >= 18 ? 'Adult' : 'Minor';

解释: 三元运算符可以简化简单的 if 判断,提升代码简洁性。


15. setIntervalsetTimeout

setTimeout(() => console.log('Hello!'), 1000);
setInterval(() => console.log('Repeated!'), 1000);

解释setTimeout 用于延迟执行某个函数,setInterval 用于定时执行函数。


16. 防抖与节流

// 防抖
const debounce = (func, delay) => {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => func(...args), delay);
  };
};

// 节流
const throttle = (func, delay) => {
  let lastTime = 0;
  return (...args) => {
    const now = new Date().getTime();
    if (now - lastTime > delay) {
      func(...args);
      lastTime = now;
    }
  };
};

解释: 防抖和节流常用于优化高频率触发的事件,比如滚动、输入等操作。


17. 字符串转数字 (parseIntparseFloat)

const integer = parseInt("123");
const floating = parseFloat("123.45");

解释parseIntparseFloat 用于将字符串转为整数或浮动数。


18. 函数柯里化

const add = (a) => (b) => a + b;
const add5 = add(5);
console.log(add5(10)); // 15

解释: 函数柯里化是将一个多参数函数转换为一系列单参数函数。


19. 计算数组的最大值和最小值

const numbers = [1, 2, 3, 4, 5];
const max = Math.max(...numbers);
const min = Math.min(...numbers);

解释Math.maxMath.min 可用于获取数组中的最大值和最小值。


20. 浅拷贝与深拷贝

const obj = { name: "John", age: 30 };
const shallowCopy = { ...obj };  // 浅拷贝
const deepCopy = JSON.parse(JSON.stringify(obj));  // 深拷贝

解释: 浅拷贝复制对象的引用,深拷贝复制对象的值。


21. 动态创建 DOM 元素

const div = document.createElement('div');
div.textContent = 'Hello, World!';
document.body.appendChild(div);

解释: 动态创建 DOM 元素并将其添加到页面中。


22. 使用 localStorage 存储数据

localStorage.setItem('username', 'John');
const username = localStorage.getItem('username');

解释localStorage 用于在浏览器中存储数据,数据持久化直到被手动清除。


23. 事件委托

document.getElementById('parent').addEventListener('click', (event) => {
  if (event.target && event.target.matches('button.classname')) {
    console.log('Button clicked');
  }
});

解释: 事件委托可以通过在父元素上监听事件,避免对每个子元素都绑定事件监听器。


24. 获取 URL 查询参数

const urlParams = new URLSearchParams(window.location.search);
const id = urlParams.get('id');

解释URLSearchParams 用于解析 URL 查询字符串。


25. 判断数据类型

const type = (value) => Object.prototype.toString.call(value).slice(8, -1).toLowerCase();

解释: 通过 Object.prototype.toString 获取详细的类型信息,避免 typeof 的一些误判。


26. 页面滚动到顶部

window.scrollTo(0, 0);

解释: 使用 scrollTo 方法可以将页面滚动到指定位置。


27. 延迟加载图片 (懒加载)

const img = document.createElement('img');
img.src = 'image.jpg';
img.loading = 'lazy';
document.body.appendChild(img);

解释: 通过设置 loading="lazy" 属性来实现图片的懒加载。


28. 防止表单重复提交

const submitButton = document.getElementById('submit');
submitButton.addEventListener('click', () => {
  submitButton.disabled = true;
  // 表单提交代码
});

解释: 通过禁用提交按钮,防止用户多次提交表单。


29. 动态修改 CSS 样式

document.body.style.backgroundColor = 'lightblue';

解释: 直接修改 DOM 元素的 style 属性来动态改变页面样式。


30. 模拟请求错误(HTTP 状态码模拟)

fetch('/api/endpoint')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .catch(error => console.error('Fetch error:', error));

解释: 通过检查 response.ok,可以判断请求是否成功。


31. 数字格式化 (如千位分隔符)

const number = 123456789;
const formatted = number.toLocaleString();

解释toLocaleString 可以格式化数字,加上千位分隔符。


32. 简单的正则表达式匹配

const regex = /\d+/;
const match = '123abc'.match(regex);
console.log(match);  // ['123']

解释: 使用正则表达式匹配字符串中的数字。


33. 简化的条件判断

const status = userIsLoggedIn && 'Welcome!';

解释: 通过短路运算符简化条件判断,提升代码简洁性。


34. 自定义事件

const event = new CustomEvent('myEvent', { detail: 'Hello' });
document.dispatchEvent(event);

解释: 使用 CustomEvent 来创建并分发自定义事件。


35. Debounce 函数

const debounce = (func, delay) => {
  let timeout;
  return function() {
    clearTimeout(timeout);
    timeout = setTimeout(func, delay);
  };
};

解释: 使用防抖函数来延迟执行某些高频操作。


36. 动态加载 JavaScript 文件

const script = document.createElement('script');
script.src = 'path/to/script.js';
document.body.appendChild(script);

解释: 通过动态创建 script 标签来异步加载外部 JavaScript 文件。


37. 模态框的显示与隐藏

const modal = document.getElementById('myModal');
modal.style.display = 'block';  // 显示模态框
modal.style.display = 'none';   // 隐藏模态框

解释: 通过修改样式控制模态框的显示与隐藏。


38. 动态添加类名

element.classList.add('active');

解释: 通过 classList 动态添加、删除或切换类名。


39. 性能优化:请求合并

const debouncedFetch = debounce(() => {
  fetch('/api/data');
}, 300);

解释: 通过请求合并优化性能,减少不必要的请求。


40. 监听元素的大小变化

const resizeObserver = new ResizeObserver(entries => {
  for (let entry of entries) {
    console.log(entry.contentRect.width);
  }
});
resizeObserver.observe(document.body);

解释ResizeObserver 用于监听元素的大小变化,适合响应式布局。


Viewing all articles
Browse latest Browse all 3145

Trending Articles