Trong Series này
- Nâng cấp cho Object
- Arrow function
- Assignment Destruction
- Rest parameters và spread operator
- Template literals
- Khai báo biến với let và const
- Căn bản class
Mục lục
- Rest parameter
- Spread Operator
Rest parameter
Khi số lượng tham số truyền vào cho một function không cố định, chúng ta có thể sử dụng arguments, sau đó sử dụng Array.prototype.slice.call để chuyển nó thành một mảng
var print() {
var list = Array.prototype.slice.call(arguments)
console.log(list)
}
print('a','b','c')
// -> ['a','b','c']Với ES6, chúng ta có một cách làm khác, thêm dấu "..." phía trước tham số
var print(...list) {
console.log(list)
}
print('a','b','c')
// -> ['a','b','c']Nếu muốn truyền vào 1 tham số bình thường
var print(first,...list) {
console.log(first)
console.log(list)
}
print('a','b','c')
// -> 'a'
// -> ['b','c']Nếu lúc trước ta phải viết
function sumAll(){
var numbers = Array.prototype.slice.call(arguments)
return numbers.reduce( function (a,b){
return a + b
})
}
// =8Nếu sử dụng Arrow function thì buộc phải thêm dấu ngoặc kép (), dù chỉ có một tham số
var sumAll = ( ...numbers ) => numbers.reduce((total,next) => total + next)
console.log( sumAll(1,2,5))
// = 8Spread Operator
Xem ví dụ bên dưới, Spread operator giúp trả về một mảng
function cast() {
return [...arguments]
}
cast('a','b','c')
// ['a','b','c']Trong trường hợp phải kết hợp nhiều mảng
var all = [ 1, ...[2,3], 4, ...[5],6,7]
console.log(all)
// [1,2,3,4,5,6,7]Một ví dụ khác để thấy lợi ích của spread operator khi kết hợp với new một object như Date
new Date( ...[2015,11,31] )
// Thu Dec 31 2015Khi muốn lấy 1 hoặc 2 phần tử của mảng, cách vẫn thường làm là shift mấy phần tử này
var list = [ 'a','b','c','d' ]
var first = list.shift()
var second = list.shift()
console.log(first)
// aCách viết mới
var [first, second, ...rest] = [ 'a','b','c','d','e' ]
// ['c','d','e']



Initializing...