ปริมาณเรทติ้ง ECMAScript

ปริมาณเรทติ้งมีความสำคัญมาก มันทำให้ภาษาแพร่หลายปฏิบัติการสามารถทำงานได้

ปริมาณเรทติ้งมีสามประเภท: NOT, AND และ OR

ปฏิบัติการ ToBoolean

ก่อนที่จะเรียนรู้ปริมาณต่าง ๆ ของปฏิบัติการทางหลักฐานเรทติ้ง ขอเล่าเราควรทราบปฏิบัติการ ToBoolean ที่อธิบายโดยคู่มือ ECMAScript-262 v5

ปฏิบัติการอุปกรณ์ ToBoolean จะเปลี่ยนพารามิเตอร์ตามกฎที่นั่นต่อไปนี้เป็นค่าหลักฐานเรทติ้ง:

ประเภทพารามิเตอร์ ผลลัพธ์
undefined false
null false
เรทติ้ง ผลลัพธ์เท่ากับพารามิเตอร์ที่ใส่ (ไม่เปลี่ยนแปลง)
ตัวเลข ถ้าพารามิเตอร์เป็น +0, -0 หรือ NaN รายงานผลลัพธ์จะเป็น false; ไม่ว่าจะเป็นที่เท่ากับ 0 หรือไม่
ข้อความ ถ้าพารามิเตอร์เป็นค่าของเชื่อมต่อว่าง รายงานผลลัพธ์จะเป็น false; ไม่ว่าจะเป็นที่เท่ากับ 0 หรือไม่
วัตถุ true

ปริมาณไม่มีค่า

ใน ECMAScript ตัวดำเนินการ NOT คือเดียวกับตัวดำเนินการ NOT ใน C และ Java ซึ่งสัญลักษณ์เป็น !

ต่างจากตัวดำเนินการ OR และ AND ตัวดำเนินการ NOTตัวดำเนินการ NOT จะกลับค่าเป็น Boolean ตลอดทั้งหมด.

การทำงานของตัวดำเนินการ NOT คือ

  • ถ้าตัวแปรคือออブเจ็กท์ จะกลับค่าเป็น false
  • ถ้าตัวแปรคือตัวเลข 0 จะกลับค่าเป็น true
  • ถ้าตัวแปรคือตัวเลขที่ไม่ใช่ 0 จะกลับค่าเป็น false
  • ถ้าตัวแปรคือ null จะกลับค่าเป็น true
  • ถ้าตัวแปรคือ NaN จะกลับค่าเป็น true
  • ถ้าตัวแปรคือ undefined จะเกิดข้อผิดพลาด

โดยทั่วไปตัวดำเนินการนี้ใช้เพื่อควบคุมวง loop

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  }
    i++;
  }
}

ในตัวอย่างนี้ ตัวแปร Boolean (bFound) ใช้เพื่อบันทึกการค้นหาที่ประสบความสำเร็จหรือไม่ ถ้าหากหาพบข้อมูลที่มีปัญหา bFound จะถูกตั้งเป็น true และ !bFound จะเท่ากับ false ซึ่งหมายความว่าการทำงานจะหยุดทำงานต่อวง loop

เมื่อตรวจสอบค่า Boolean ของตัวแปร ECMAScript ก็สามารถใช้ตัวดำเนินการ NOT โดยที่ต้องใช้ NOT สองตัวในบรรทัดเดียวกัน。NOT แรกจะกลับค่าของประเภทของตัวแปรเป็น Boolean และ NOT ที่สองจะหันค่า Boolean กลับไปให้ได้ค่า Boolean ที่แท้จริงของตัวแปร。

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("bFalse จะมีค่าทางวิเคราะห์เป็น " + (!!bFalse));
document.write("sRed จะมีค่าทางวิเคราะห์เป็น " + (!!sRed));
document.write("iZero จะมีค่าทางวิเคราะห์เป็น " + (!!iZero));
document.write("iThreeFourFive จะมีค่าทางวิเคราะห์เป็น " + (!!iThreeFourFive));
document.write("oObject จะมีค่าทางวิเคราะห์เป็น " + (!!oObject));

ผลลัพธ์:

ค่าทางวิเคราะห์ของ bFalse คือ false
ค่าทางวิเคราะห์ของ sRed คือ true
ค่าทางวิเคราะห์ของ iZero คือ false
ค่าทางวิเคราะห์ของ iThreeFourFive คือ true
ค่าทางวิเคราะห์ของ oObject คือ true 

ปฏิทิน AND

ใน ECMAScript ปฏิทิน AND ใช้เส้นขนานคู่ (&&) แสดง

ตัวอย่าง:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

ตารางของค่าที่เป็นปฏิทิน AND นี้เปรียบเทียบปฏิทิน AND

ตัวประกอบการที่ 1 ตัวประกอบการที่ 2 ผลลัพธ์
true true true
true false false
false true false
false false false

ตัวแปรที่ใช้ในปฏิทิน AND สามารถเป็นชนิดใดก็ได้ ไม่เพียงแค่ค่า Boolean

ถ้าหนึ่งในตัวแปรไม่ใช่ค่า Boolean ปฏิทิน AND อาจไม่กลับค่า Boolean

  • ถ้าหนึ่งในตัวแปรคือตัวแปรที่เป็นเป้าหมาย และตัวแปรอีกตัวคือค่า Boolean จะกลับค่าตัวแปรที่เป็นเป้าหมาย
  • ถ้าทั้งสองตัวแปรเป็นตัวแปรที่เป็นเป้าหมาย จะกลับค่าตัวแปรที่สอง
  • ถ้าหนึ่งในตัวแปรคือ null จะกลับค่า null
  • ถ้าหนึ่งในตัวแปรคือ NaN จะกลับค่า NaN
  • ถ้าค่าที่หนึ่งเป็น undefined จะเกิดข้อผิดพลาด

เหมือนกับปฏิทิน AND ใน Java ปฏิทิน AND ใน ECMAScript ก็เป็นปฏิทินที่ง่าย คือ หากตัวแปรที่แรกเป็นปฏิทินที่ตัดสินผลลัพธ์ จะไม่ทำการคำนวณตัวแปรที่สอง สำหรับปฏิทิน AND หากตัวแปรที่แรกเป็น false แล้ว ไม่ว่าตัวแปรที่สองมีค่าอะไรก็ตาม ผลลัพธ์จะไม่สามารถเป็น true

ให้คิดถึงตัวอย่างด้านล่าง:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//เกิดข้อผิดพลาด
alert(bResult);			//บรรทัดนี้จะไม่ทำงาน

บรรยายนี้จะทำให้เกิดข้อผิดพลาดเมื่อทำปฏิทิน AND โดยเหตุผลที่ตัวแปร bUnknown ยังไม่ได้รับค่า ตัวแปร bTrue มีค่า true เพราะการปฏิทิน AND จะทำการคำนวณตัวแปร bUnknown ต่อไป การกระทำนี้จะทำให้เกิดข้อผิดพลาด เพราะค่าของ bUnknown คือ undefined และไม่สามารถใช้ในปฏิทิน AND

ถ้าแก้ไขตัวอย่างนี้โดยใส่ค่าแรกเป็น false จะไม่เกิดข้อผิดพลาด:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//แสดงข้อความ "false"

ในบรรยายนี้ สคริปต์จะแสดงออกค่าที่ได้จากการคำนวณปฏิทิน AND คือ ข้อความ "false" แม้ว่าค่าของตัวแปร bUnknown จะเป็น undefined มันก็จะไม่ถูกคำนวณ เพราะค่าของตัวแปรที่แรกคือ false

คำเตือน:เมื่อใช้ตัวประกอบการ AND ทางวิชาการ ต้องจำได้ถึงคุณสมบัติการประกอบง่ายของมัน

ตัวประกอบการ OR

ตัวประกอบการ OR ใน ECMAScript คล้ายกับที่ Java ใช้ และแสดงด้วยสองเส้นทางตรง (||)

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

ตารางค่าของความจริงของตัวประกอบการ OR ระบุการปฏิบัติตัวประกอบการ

ตัวประกอบการที่ 1 ตัวประกอบการที่ 2 ผลลัพธ์
true true true
true false true
false true true
false false false

เหมือนตัวประกอบการ AND ทางวิชาการ ถ้าค่าที่หนึ่งไม่ใช่ค่า Boolean ตัวประกอบการ OR ทางวิชาการไม่ก็จะกลับค่า Boolean

  • ถ้าค่าหนึ่งเป็นวัตถุ และค่าที่อื่นทั้งหมดเป็น false จะกลับค่าวัตถุนั้น
  • ถ้าค่าทั้งหมดเป็นวัตถุ จะกลับค่าวัตถุแรก
  • ถ้าค่าที่สุดท้ายเป็น null และค่าที่อื่นเป็น false จะกลับค่า null
  • ถ้าค่าที่สุดท้ายเป็น NaN และค่าที่อื่นเป็น false จะกลับค่า NaN
  • ถ้าค่าที่หนึ่งเป็น undefined จะเกิดข้อผิดพลาด

เหมือนตัวประกอบการ AND ทางวิชาการ ตัวประกอบการ OR ทางวิชาการเป็นการประกอบง่าย สำหรับตัวประกอบการ OR ถ้าค่าของค่าที่หนึ่งเป็น true จะไม่คำนวณค่าที่สอง

ตัวอย่าง:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//แสดง "true"

เหมือนตัวอย่างก่อนหน้า ตัวแปร bUnknown ยังไม่ได้รับการกำหนด แต่เนื่องจากค่าของตัวแปร bTrue คือ true ตัวแปร bUnknown จะไม่ถูกคำนวณ ดังนั้นการแสดงคือ "true"

ถ้าเปลี่ยน bTrue ให้เป็น false จะเกิดข้อผิดพลาด:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//เกิดข้อผิดพลาด
alert(bResult);			//จะไม่ปฏิบัติการบรรทัดนี้