วัตถุ arguments ECMAScript

ตัวแปร arguments

ในรหัสฟังก์ชัน นักพัฒนาใช้ตัวแปรพิเศษ argumentsไม่จำเป็นต้องระบุชื่อตัวแปรจึงสามารถเข้าถึงค่าของเขาได้

ตัวอย่าง ในฟังก์ชัน sayHi() ตัวแปรที่ 1 คือ message แต่สามารถใช้ arguments[0] รับค่าที่เหมือนกัน ซึ่งคือค่าตัวแปรที่ 1 (ตัวแปรที่ 1 ตั้งอยู่ที่ตำแหน่ง 0 ตัวแปรที่ 2 ตั้งอยู่ที่ตำแหน่ง 1 และอย่างนั้นต่อไป)

ดังนั้น ไม่จำเป็นต้องระบุชื่อตัวแปร ก็สามารถเขียนฟังก์ชันใหม่ได้

function sayHi() {
  if (arguments[0] == "bye") {
    return;
  }
  alert(arguments[0]);
}

ตรวจสอบจำนวนตัวแปร

ยังสามารถใช้ตัวแปร arguments ในการตรวจสอบจำนวนตัวแปรที่ส่งมาให้กับฟังก์ชันด้วยการอ้างอิงค่าของ arguments.length

รหัสด้านล่างนี้จะแสดงจำนวนตัวแปรที่ใช้ในการเรียกฟังก์ชันในแต่ละครั้ง

function howManyArgs() {
  alert(arguments.length);
}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);

รหัสที่ออกมาจะแสดงค่า "2" "0" และ "1" ตามลำดับ

หมายเหตุ:ต่างจากภาษาการออกแบบโปรแกรมอื่น ๆ ECMAScript จะไม่ตรวจสอบจำนวนตัวแปรที่ส่งมาให้กับฟังก์ชัน ซึ่งเท่ากับจำนวนตัวแปรที่กำหนดในการเรียกฟังก์ชัน ฟังก์ชันที่ถูกกำหนดโดยผู้พัฒนาสามารถรับอัตราการส่งมาในจำนวนที่ไม่จำกัด (ตามเอกสารของ Netscape สามารถรับได้ถึง 255 ตัวแปร) โดยไม่มีข้อผิดพลาดใดๆ ตัวแปรที่ขาดไปจะถูกส่งมาให้กับฟังก์ชันด้วยค่า undefined และตัวแปรที่เกินจำนวนที่กำหนดจะถูกละเลย

การแสดงที่เหมือนการนำฟังก์ชันที่เรียกด้วย

ใช้ตัวแปร arguments ในการตรวจสอบจำนวนตัวแปรที่ถูกส่งมาให้กับฟังก์ชัน ซึ่งสามารถแสดงความหมายเหมือนการนำฟังก์ชันที่เรียกด้วย

function doAdd() {
  if(arguments.length == 1) {
    alert(arguments[0] + 5);
  } else if(arguments.length == 2) {
    alert(arguments[0] + arguments[1]);
  }
}
doAdd(10);	// ออก "15"
doAdd(40, 20);	// ออก "60"

เมื่อมีตัวแปรเดียว ฟังก์ชัน doAdd() จะเพิ่มตัวแปรดังกล่าวด้วย 5 ถ้ามีตัวแปรสองตัว จะเรียกการเพิ่มตัวแปรทั้งสองตัวและกลับค่าเป็นผลการเพิ่ม ดังนั้น doAdd(10) จะกลับค่า "15" และ doAdd(40, 20) จะกลับค่า "60"

ถึงแม้จะไม่ดีเท่านั้น แต่มันเพียงพอที่จะหลีกเลี่ยงความจำกัดของ ECMAScript นี้