工具库
JavaScript工具库是为了提高开发效率而封装的一系列实用函数和方法集合,它们可以帮助开发者快速实现各种功能,避免重复造轮子。
1. Lodash
Lodash是一个一致性、模块化、高性能的JavaScript实用工具库。
安装
bash
npm install lodash
核心功能
数组操作
javascript
const _ = require('lodash');
// 数组去重
const array = [1, 2, 3, 2, 1];
const uniqueArray = _.uniq(array);
console.log(uniqueArray); // [1, 2, 3]
// 数组切片
const sliceArray = _.slice(array, 0, 2);
console.log(sliceArray); // [1, 2]
// 数组扁平化
const nestedArray = [1, [2, [3, [4]]]];
const flattenedArray = _.flattenDeep(nestedArray);
console.log(flattenedArray); // [1, 2, 3, 4]
对象操作
javascript
// 合并对象
const object1 = { a: 1, b: 2 };
const object2 = { b: 3, c: 4 };
const mergedObject = _.merge(object1, object2);
console.log(mergedObject); // { a: 1, b: 3, c: 4 }
// 提取对象属性
const user = { name: 'Alice', age: 25, email: 'alice@example.com' };
const userInfo = _.pick(user, ['name', 'age']);
console.log(userInfo); // { name: 'Alice', age: 25 }
// 检查对象是否为空
const emptyObject = {};
console.log(_.isEmpty(emptyObject)); // true
函数操作
javascript
// 防抖函数
const debouncedFunction = _.debounce(() => {
console.log('Debounced function called');
}, 1000);
// 节流函数
const throttledFunction = _.throttle(() => {
console.log('Throttled function called');
}, 1000);
// 柯里化函数
const add = (a, b) => a + b;
const curriedAdd = _.curry(add);
console.log(curriedAdd(1)(2)); // 3
2. Axios
Axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js。
安装
bash
npm install axios
核心功能
基本请求
javascript
const axios = require('axios');
// GET请求
axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
// POST请求
axios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
请求配置
javascript
// 自定义请求配置
axios({
method: 'get',
url: 'https://jsonplaceholder.typicode.com/posts',
params: {
_limit: 5
},
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
创建实例
javascript
// 创建axios实例
const instance = axios.create({
baseURL: 'https://jsonplaceholder.typicode.com',
timeout: 1000,
headers: {
'X-Custom-Header': 'foobar'
}
});
// 使用实例
instance.get('/posts/1')
.then(response => {
console.log(response.data);
});
拦截器
javascript
// 请求拦截器
instance.interceptors.request.use(
config => {
// 在发送请求之前做些什么
console.log('Request sending:', config);
return config;
},
error => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
instance.interceptors.response.use(
response => {
// 对响应数据做点什么
console.log('Response received:', response);
return response;
},
error => {
// 对响应错误做点什么
return Promise.reject(error);
}
);
3. Moment.js
Moment.js是一个用于解析、验证、操作和显示日期和时间的JavaScript库。
安装
bash
npm install moment
核心功能
javascript
const moment = require('moment');
// 当前时间
const now = moment();
console.log(now.format()); // 2026-02-08T10:30:00+08:00
// 格式化日期
console.log(now.format('YYYY-MM-DD')); // 2026-02-08
console.log(now.format('HH:mm:ss')); // 10:30:00
console.log(now.format('YYYY年MM月DD日 HH时mm分ss秒')); // 2026年02月08日 10时30分00秒
// 日期解析
const date = moment('2026-02-08');
console.log(date.isValid()); // true
// 日期操作
const tomorrow = moment().add(1, 'days');
console.log(tomorrow.format('YYYY-MM-DD'));
const lastWeek = moment().subtract(1, 'weeks');
console.log(lastWeek.format('YYYY-MM-DD'));
// 日期比较
const date1 = moment('2026-02-08');
const date2 = moment('2026-02-09');
console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.diff(date2, 'days')); // -1
4. Day.js
Day.js是一个轻量级的日期时间处理库,API设计与Moment.js兼容。
安装
bash
npm install dayjs
核心功能
javascript
const dayjs = require('dayjs');
// 当前时间
const now = dayjs();
console.log(now.format()); // 2026-02-08T10:30:00+08:00
// 格式化日期
console.log(now.format('YYYY-MM-DD')); // 2026-02-08
console.log(now.format('HH:mm:ss')); // 10:30:00
// 日期解析
const date = dayjs('2026-02-08');
console.log(date.isValid()); // true
// 日期操作
const tomorrow = dayjs().add(1, 'day');
console.log(tomorrow.format('YYYY-MM-DD'));
const lastWeek = dayjs().subtract(1, 'week');
console.log(lastWeek.format('YYYY-MM-DD'));
// 日期比较
const date1 = dayjs('2026-02-08');
const date2 = dayjs('2026-02-09');
console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.diff(date2, 'day')); // -1
5. Chart.js
Chart.js是一个用于创建交互式图表的JavaScript库。
安装
bash
npm install chart.js
核心功能
html
<!DOCTYPE html>
<html>
<head>
<title>Chart.js Example</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
const ctx = document.getElementById('myChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
6. Ramda
Ramda是一个实用的函数式编程库,提供了许多纯函数。
安装
bash
npm install ramda
核心功能
javascript
const R = require('ramda');
// 函数组合
const add1 = x => x + 1;
const multiply2 = x => x * 2;
const add1ThenMultiply2 = R.compose(multiply2, add1);
console.log(add1ThenMultiply2(3)); // 8
// 函数柯里化
const add = R.curry((a, b) => a + b);
const add1 = add(1);
console.log(add1(2)); // 3
// 数据优先
const array = [1, 2, 3, 4, 5];
const double = R.map(x => x * 2, array);
console.log(double); // [2, 4, 6, 8, 10]
const even = R.filter(x => x % 2 === 0, array);
console.log(even); // [2, 4]
const sum = R.reduce((acc, x) => acc + x, 0, array);
console.log(sum); // 15
最佳实践
- 按需引入:只引入需要的函数,减少打包体积
- 考虑替代方案:对于现代浏览器,某些功能可以使用原生方法实现
- 了解版本兼容性:使用时注意库的版本兼容性
- 避免过度依赖:不要过度依赖工具库,保持代码的可维护性
- 性能考虑:选择性能良好的工具库,特别是在大型应用中
学习资源
最后更新:2026-02-08