1. 参数默认值
function test (first, second = 'b') {
console.log(arguments[0] === first) // true
console.log(arguments[1] === second) // false
first = first + second
second = ''
console.log(arguments[0] === first) // false
console.log(arguments[1] === second) // false
}
test('a')
重新 赋值之后,arguments 永远是不会变的,永远等于调用该函数时传入的参数的值,
arguments.length: 函数调用时传入多少个参数,长度就是多少
2. 函数的 length 属性用于指示具名参数的数量,而剩余参数对其毫无影响
function test (a, b, c) {}
test(1,2,3,4)
console.log(test.length) // 3
test 函数中的具名参数 abc 所以该函数长度为3
function test (a, ...args) {}
test(1,2,3,4)
console.log(test.length) // 1
具名参数只有a
3. 剩余参数不能在对象字面量的 setter 属性中使用
存在此限制的原因是:对象字面量的 setter 被限定只能使用单个参数;而剩余参数按照定义是不限制参数数量的,因此它在此处不被许可
let obj = {
name: 1,
set name(value) {
console.log(value)
}
}
obj.name = 'sds'
4. 扩展运算符
求数组最大值
方法一:
let values = [190, 25, 50, 75, 100]
var max = values[0]
for (var i = 0; i< values.length; i++) {
max = Math.max(max, values[i])
}
console.log(max)
方法二:巧用apply
apply的一个巧妙的用处:可以将一个数组默认的转换为一个参数列表([param1,param2,param3] 转换为 param1,param2,param3)
let values = [190, 25, 50, 75, 100]
console.log(Math.max.apply(Math, values))
方法三:扩展运算符
let values = [190, 25, 50, 75, 100]
console.log(Math.max(...values))