ES2018: Object Rest/Spread Properties
三点运算符 ...
在 JavaScript 中是个非常奇妙的存在。根据使用场景不同,它有两种功能:作为扩展运算符,或作为剩余参数。
ES2015 率先为数组加入了对三点运算符的支持,实现了:
- 解构赋值时,收集剩余成员
- 在数组字面量中,展开数组
// rest 变量收集 primes 数组没被接收的剩余成员
const primes = [2, 3, 5, 7, 11];
const [first, second, ...rest] = primes;
console.log(first); // 2
console.log(second); // 3
console.log(rest); // [5, 7, 11]
// 展开 rest 数组,赋值给 primesCopy
const primesCopy = [first, second, ...rest];
console.log(primesCopy); // [2, 3, 5, 7, 11]
三年后,ES2018 中也为对象加入了三点运算符的支持,实现了:
- 解构赋值时,收集剩余属性
- 在对象字面量中,展开对象
const person = {
firstName: 'Sebastian',
lastName: 'Markbåge',
country: 'USA',
state: 'CA',
};
// rest 变量收集 person 对象没被接收的剩余属性
const { firstName, lastName, ...rest } = person;
console.log(firstName); // Sebastian
console.log(lastName); // Markbåge
console.log(rest); // { country: 'USA', state: 'CA' }
// 展开 rest 对象,赋值给 personCopy
const personCopy = { firstName, lastName, ...rest };
console.log(personCopy);
// { firstName: 'Sebastian', lastName: 'Markbåge', country: 'USA', state: 'CA' }
(完)