使用Rest参数可以使我们的代码更简洁,在使用的过程中有如下两个注意点:
- Rest参数必须放在参数最后的位置。
- Rest参数接收的任何数据,默认最外层先给你包裹一层数组,如果想获取传入的原数据,还需要配合数组扩展操作。
关于第二点,下面举例验证:
function deal(...list) {
console.log(list); // [1,2,3]
}
deal(1,2,3)
function deal(...list) {
console.log(...list); // ...[1,2,3] => 1 2 3
}
deal(1,2,3);
function deal(...list) {
console.log(list); // [[1,2,3]]
}
deal([1,2,3])
function deal(...list) {
console.log(list);
}
let obj = {
name: 'pcm',
age: 30
}
deal(obj);
function deal(...list) {
console.log(...list); //{name: "pcm", age: 30}
}
let obj = {
name: 'pcm',
age: 30
}
deal(obj);
上面list其实接收到的是[obj],但是配合数组扩展…[obj],又将对象解析了出来。
注意:对于解构赋值中的rest参数不会被包裹一层数组:
<script>
function fn({ a, ...other}) {
console.log(a); // 1
console.log(other) // { b: 2, c: 3}
}
fn({ a: 1, b: 2, c: 3})
function fn1(a, ...other) {
console.log(other) // [2, 3]
}
fn1(1, 2, 3)
function fn3([a, ...other]) {
console.log(a); // 1
console.log(other); // [2, 3]
}
fn3([1, 2, 3])
</script>