在前端开发中,JavaScript 是一门不可或缺的编程语言。无论是构建交互式用户界面,还是进行数据处理,JavaScript 都发挥着重要作用。因此,掌握一些常用的公共方法将极大地提高开发效率和代码质量。本文将介绍一些常用的 JavaScript 公共方法,并提供相应的代码示例。

1. 深拷贝和浅拷贝

在 JavaScript 中,对象和数组是引用类型。当我们将一个对象赋值给另一个变量时,实际上是复制了引用而不是对象本身。为了避免这种情况,我们需要实现深拷贝。

// 浅拷贝
const shallowCopy = (obj) => {
    return { ...obj }; // 使用扩展运算符
};

// 深拷贝
const deepClone = (obj) => {
    return JSON.parse(JSON.stringify(obj));
};

// 示例
const original = { name: '张三', address: { city: '北京' } };
const cloned = deepClone(original);
cloned.address.city = '上海'; // 修改克隆对象的值
console.log(original.address.city); // 输出: 北京,原对象未受影响

2. 数组去重

在处理数据时,经常需要对数组进行去重操作。以下是一个使用 Set 去重的简单方法。

const uniqueArray = (arr) => {
    return [...new Set(arr)];
};

// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = uniqueArray(arr);
console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5]

3. 函数防抖和节流

在处理频繁触发的事件(如滚动和点击)时,防抖和节流是非常常用的技术。防抖是在事件停止触发之后再执行,而节流是在一定时间间隔内只执行一次。

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

// 节流
const throttle = (func, limit) => {
    let lastFunc;
    let lastRan;
    return function(...args) {
        if (!lastRan) {
            func.apply(this, args);
            lastRan = Date.now();
        } else {
            clearTimeout(lastFunc);
            lastFunc = setTimeout(function() {
                if ((Date.now() - lastRan) >= limit) {
                    func.apply(this, args);
                    lastRan = Date.now();
                }
            }, limit - (Date.now() - lastRan));
        }
    };
};

// 示例
window.addEventListener('scroll', debounce(() => {
    console.log('防抖:处理滚动事件');
}, 200));

window.addEventListener('scroll', throttle(() => {
    console.log('节流:处理滚动事件');
}, 1000));

4. Ajax 请求封装

在前端中,Ajax 请求是与后端进行交互的重要手段。通过封装 Ajax,我们可以简化请求逻辑。

const ajax = (url, method = 'GET', data = null) => {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open(method, url);

        xhr.onload = () => {
            if (xhr.status >= 200 && xhr.status < 300) {
                resolve(JSON.parse(xhr.responseText));
            } else {
                reject(new Error(xhr.statusText));
            }
        };

        xhr.onerror = () => reject(new Error('网络错误'));

        if (method === 'POST' && data) {
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.send(JSON.stringify(data));
        } else {
            xhr.send();
        }
    });
};

// 示例
ajax('https://api.example.com/data')
    .then(response => console.log(response))
    .catch(error => console.error(error));

5. 日期格式化

在处理日期时,我们经常需要将日期格式化为特定的字符串格式。以下是一个简单的日期格式化函数。

const formatDate = (date, format) => {
    const options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' };
    return new Intl.DateTimeFormat('zh-CN', options).format(date);
};

// 示例
const now = new Date();
console.log(formatDate(now)); // 输出:当前日期和时间

总结

本文介绍了一些常用的 JavaScript 公共方法,包括深拷贝、数组去重、函数防抖和节流、Ajax 请求封装以及日期格式化。这些方法可以极大地提高前端开发的效率和代码的可维护性。希望这些示例能对你的开发工作有所帮助!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部