Default Parameters และ Rest Parameters เป็นฟีเจอร์ ES6 ที่แก้ปัญหาพารามิเตอร์ต่างกัน
Default Parameters (พารามิเตอร์เริ่มต้น)
กำหนดค่าเริ่มต้นให้พารามิเตอร์ ใช้เมื่อไม่ได้ส่งอาร์กิวเมนต์ หรือส่ง undefined
<html>
<body>
<script>
function inc(val1, inc = 1) {
return val1 + inc;
}
document.write(inc(10, 10)); // 20
document.write("<br>");
document.write(inc(10)); // 11
</script>
</body>
</html>
Rest Parameters (พารามิเตอร์ส่วนที่เหลือ)
รวมอาร์กิวเมนต์ที่เหลือทั้งหมดไว้ใน อาร์เรย์จริง (Array) ใช้ ... นำหน้าพารามิเตอร์ตัวสุดท้าย
<html>
<body>
<script>
function addition(...numbers) {
var res = 0;
numbers.forEach(function(number) {
res += number;
});
return res;
}
document.write(addition(3)); // 3
document.write("<br>");
document.write(addition(5, 6, 7, 8, 9)); // 35
</script>
</body>
</html>
ตารางเปรียบเทียบ
| คุณสมบัติ | Default Parameters | Rest Parameters |
|---|---|---|
| ไวยากรณ์ | param = defaultValue | ...paramName |
| วัตถุประสงค์ | ให้ค่าเริ่มต้นเมื่อไม่ส่งมา | รวมอาร์กิวเมนต์ที่เหลือเป็นอาร์เรย์ |
| ตำแหน่ง | ทุกตำแหน่ง (แต่หลัง default ต้องเป็น default ต่อไป) | ต้องเป็นตัวสุดท้ายเท่านั้น |
| ชนิดข้อมูล | ค่าของพารามิเตอร์นั้นๆ | Array |
| arguments object | ไม่เกี่ยวข้อง | แทน arguments object (ซึ่งไม่ใช่ Array จริง) |
| Destructuring | รองรับ | รองรับ (...[a, b, c]) |
ใช้ร่วมกันได้
function foo(required, optional = "default", ...rest) {
console.log(required, optional, rest);
}
foo(1); // 1, "default", []
foo(1, 2); // 1, 2, []
foo(1, 2, 3, 4, 5); // 1, 2, [3, 4, 5]