JavaScript 展开运算符的三个妙用
在日常开发中,展开运算符(...)是一个非常实用的语法特性。如果你还没怎么用过它,看完这篇文章或许能帮你打开新思路。
一、合并数组更优雅
过去合并两个数组,我们习惯用 concat,或者写循环。现在一行代码就能搞定:
javascript
ini
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const combined = [...arr1, ...arr2]; // [1,2,3,4,5,6]
你甚至可以在任意位置插入新元素。比如想生成一个新数组,开头放0,中间放arr1,结尾放4,可以写成 [0, ...arr1, 4],非常灵活。相比传统的 concat,展开运算符的写法更加直观,可读性明显提升。
二、复制数组和对象
想快速复制一个数组或对象,又怕修改原数据?展开运算符可以轻松实现浅拷贝:
javascript
ini
const original = { name: 'Tom', age: 18 };
const copy = { ...original };
修改 copy 中的基本类型属性不会影响 original。不过需要注意一个细节:如果原对象的某个属性值本身是对象或数组,那么拷贝过来的只是一个引用,内部的修改依然会同步到原对象。这是浅拷贝的特点,在使用时要根据实际情况决定是否改用深拷贝。
三、函数调用替代 apply
以前把数组作为参数传给函数,常用写法是 fn.apply(null, arr)。现在直接用展开运算符,代码会清爽很多:
javascript
ini
const nums = [10, 20, 30];
console.log(Math.max(...nums)); // 30
不仅可读性大大提高,还少写了一个 null 参数,不容易出错。类似的,console.log(...['a','b','c']) 也会依次打印三个字符。
总结
展开运算符虽然看起来只是三个小点,但用好了能让代码更干净、更易读。建议大家在合并数组、复制对象、传递参数时优先想到它。如果你是刚接触 ES6 的同学,不妨现在就打开浏览器控制台试一试,几分钟就能上手。第一次发文,如有不足,欢迎评论区指正,互相学习!