โอเปอเรเตอร์การเปรียบเทียบจะเปรียบเทียบค่าของโอเปอเรนด์ 2 รายการและประเมินว่าคำสั่งที่สร้างขึ้นเป็น true หรือ false ตัวอย่างต่อไปนี้ใช้โอเปอเรเตอร์ความเท่าเทียมแบบเข้มงวด (===) เพื่อเปรียบเทียบโอเปอเรนด์ 2 รายการ ได้แก่ นิพจน์ 2 + 2 และค่า 4 เนื่องจากผลลัพธ์ของนิพจน์และค่าตัวเลข 4 เหมือนกัน นิพจน์นี้จึงให้ค่าเป็น true
2 + 2 === 4
> true
การบังคับให้ใช้ประเภทและความเท่าเทียม
โอเปอเรเตอร์การเปรียบเทียบที่ใช้บ่อยที่สุด 2 รายการ ได้แก่ == สําหรับความเท่าเทียมแบบหลวม และ === สําหรับความเท่าเทียมแบบเข้มงวด == ทำการเปรียบเทียบแบบหลวมๆ ระหว่างค่า 2 ค่าโดยบังคับให้โอเปอเรนดเป็นประเภทข้อมูลที่ตรงกัน หากเป็นไปได้ เช่น 2 == "2" จะแสดงผลเป็น true แม้ว่าจะมีการเปรียบเทียบระหว่างค่าตัวเลขกับค่าสตริงก็ตาม
2 == 2
> true
2 == "2"
> true
เช่นเดียวกับ != ซึ่งจะแสดงผล true เฉพาะในกรณีที่โอเปอเรนดที่เปรียบเทียบไม่เท่ากันแบบหลวมๆ
2 != 3
> true
2 != "2"
> false
การเปรียบเทียบแบบเข้มงวดที่ใช้ === หรือ !== จะไม่บังคับให้เปลี่ยนประเภท หากต้องการให้การเปรียบเทียบแบบเข้มงวดให้ค่าเป็น true ค่าที่เปรียบเทียบกันต้องเป็นประเภทข้อมูลเดียวกัน ด้วยเหตุนี้ 2 == "2" จึงแสดงผลเป็น true แต่ 2 === "2" แสดงผลเป็น false
2 === 3
> false
2 === "2"
> false
ใช้ === ทุกครั้งที่เป็นไปได้เพื่อลดความคลุมเครือที่อาจเกิดขึ้นจากการบังคับให้เปลี่ยนรูปแบบอัตโนมัติ
| โอเปอเรเตอร์ | คำอธิบาย | การใช้งาน | ผลลัพธ์ |
|---|---|---|---|
| === | ตรงกันทั้งหมด | 2 === 2 | จริง |
| !== | ไม่ตรงกันทั้งหมด | 2 !== "2" | จริง |
| == | เท่ากับ (หรือ "เกือบเท่ากับ") | 2 == "2" | จริง |
| != | ไม่เท่ากัน | 2 != "3" | จริง |
| > | มากกว่า | 3 > 2 | จริง |
| >= | มากกว่าหรือเท่ากับ | 2 >= 2 | จริง |
| < | น้อยกว่า | 2 < 3 | จริง |
| <= | น้อยกว่าหรือเท่ากับ | 2 <= 3 | จริง |
เงื่อนไขที่เป็นจริงและไม่เป็นจริง
ค่าทั้งหมดใน JavaScript จะเป็น true หรือ false โดยปริยาย และสามารถเปลี่ยนให้เป็นค่าบูลีนที่เกี่ยวข้องได้ เช่น โดยใช้ตัวเปรียบเทียบ "เกือบจะเท่ากัน" ชุดค่าที่จำกัดซึ่งบังคับให้เป็น false
0nullundefinedNaN- สตริงว่าง (
"")
ระบบจะบังคับให้ค่าอื่นๆ ทั้งหมดเป็น true ซึ่งรวมถึงสตริงที่มีอักขระตั้งแต่ 1 ตัวขึ้นไปและตัวเลขที่ไม่ใช่ 0 ทั้งหมด ซึ่งโดยทั่วไปเรียกว่าค่า "จริง" และ "เท็จ"
"My string" == true
> true
100 == true
> true
0 == true
> false
โอเปอเรเตอร์ตรรกะ
ใช้โอเปอเรเตอร์เชิงตรรกะ AND (&&), OR (||) และ NOT (!) เพื่อควบคุมการไหลของสคริปต์ตามการประเมินคำสั่งแบบมีเงื่อนไขตั้งแต่ 2 รายการขึ้นไป
2 === 3 || 5 === 5;
> true
2 === 2 && 2 === "2"
> false
2 === 2 && !"My string."
> false
นิพจน์เชิงตรรกะ "ไม่ใช่" (!) จะปฏิเสธค่าที่ "จริง" หรือ "เท็จ" ของโอเปอเรนด์ โดยประเมินเป็น true หากโอเปอเรนด์ประเมินเป็น false และ false หากโอเปอเรนด์ประเมินเป็น true
true
> true
!true
> false
!false
> true
การใช้โอเปอเรเตอร์ NOT เชิงตรรกะ (!) ไว้หน้าประเภทข้อมูลอื่น เช่น ตัวเลขหรือสตริง จะบังคับให้ค่านั้นเป็นบูลีน และกลับค่าที่ถูกต้องหรือไม่ถูกต้องของผลลัพธ์
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
แนวทางปฏิบัติทั่วไปคือการใช้โอเปอเรเตอร์ NOT 2 ตัวเพื่อบังคับให้ข้อมูลเป็นค่าบูลีนซึ่งตรงกันอย่างรวดเร็ว ดังนี้
!!"string"
> true
!!0
> false
โอเปอเรเตอร์ AND และ OR ทางตรรกะจะไม่ทำการบังคับใดๆ ด้วยตนเอง โดยจะแสดงผลค่าของหนึ่งใน 2 ออบเจ็กต์ที่ประเมิน โดยโอบเจ็กต์ที่เลือกจะกำหนดโดยการประเมินนั้น
AND เชิงตรรกะ (&&) จะแสดงผลโอเปอเรเตอร์แรกจาก 2 รายการก็ต่อเมื่อโอเปอเรเตอร์นั้นให้ค่าเป็น false และแสดงผลโอเปอเรเตอร์ที่ 2 ในกรณีอื่นๆ ในการเปรียบเทียบที่ประเมินเป็นค่าบูลีน ระบบจะแสดงผล true เฉพาะในกรณีที่โอเปอเรนดทั้งสองข้างของ AND เชิงตรรกะประเมินเป็น true หากด้านใดด้านหนึ่งประเมินเป็น false ระบบจะแสดงผล false
true && false
> false
false && true
> false
false && false
> false
true && true
> true
เมื่อใช้ && กับโอเปอเรนด์ที่ไม่ใช่บูลีน 2 รายการ ระบบจะแสดงผลโอเปอเรนด์แรกโดยไม่มีการเปลี่ยนแปลงหากบังคับให้เป็น false ได้ หากบังคับให้ค่าดำเนินการแรกเป็น true ได้ ระบบจะแสดงผลค่าดำเนินการที่ 2 โดยไม่เปลี่ยนแปลง
false && "My string"
> false
null && "My string"
> null
"My string" && false
> false
"My string" && "My second string"
> "My second string"
2 === 2 && "My string"
> "My string"
OR เชิงตรรกะ (||) จะแสดงผลลัพธ์ของโอเปอเรเตอร์แรกใน 2 รายการก็ต่อเมื่อโอเปอเรเตอร์นั้นให้ค่าเป็น true และแสดงผลลัพธ์ของโอเปอเรเตอร์ที่ 2 ในกรณีอื่นๆ ในการเปรียบเทียบที่ประเมินเป็นค่าบูลีน ระบบจะแสดงผล true หากโอเปอเรนดหนึ่งๆ ประเมินเป็น true และหากไม่มีด้านใดประเมินเป็น true ระบบจะแสดงผล false
true || false
> true
false || true
> true
true || true
> true
false || false
> false
เมื่อใช้ || กับโอเปอเรนด์ที่ไม่ใช่บูลีน 2 รายการ ระบบจะแสดงผลโอเปอเรนด์แรกโดยไม่มีการเปลี่ยนแปลงหากสามารถบังคับให้เป็น true ได้ หากบังคับให้ค่าดำเนินการแรกเป็น false ได้ ระบบจะแสดงผลค่าดำเนินการที่ 2 โดยไม่เปลี่ยนแปลง
false || "My string"
> "My string"
null || "My string"
> "My string"
"My string" || false
> "My string"
"My string" || "My second string"
> "My string"
2 === 2 || "My string"
> true
โอเปอเรเตอร์ Nullish Coalescing
เปิดตัวใน ES2020 "โอเปอเรเตอร์การรวมค่า Nullish" (??) จะแสดงผลโอเปอเรนดแรกเฉพาะในกรณีที่โอเปอเรนดนั้นมีค่าอื่นที่ไม่ใช่ null หรือ undefined ไม่เช่นนั้น ระบบจะแสดงผลตัวดำเนินการที่ 2
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
?? คล้ายกับ OR เชิงตรรกะ แต่เข้มงวดกว่าในการประเมินโอเปอเรนด์แรก || จะแสดงผลออบเจ็กต์ที่ 2 สำหรับนิพจน์ใดก็ได้ที่บังคับให้เป็น false ซึ่งรวมถึง undefined และ null ?? จะแสดงผลอาร์กิวเมนต์ที่ 2 เฉพาะในกรณีที่อาร์กิวเมนต์แรกเท่ากับ null หรือ undefined อย่างเคร่งครัดเท่านั้น แม้ว่าจะบังคับให้เป็น false ได้ก็ตาม
0 ?? "My string";
> 0
false ?? "My string";
> false
undefined ?? "My string";
> "My string"
โอเปอเรเตอร์การกําหนดค่าเชิงตรรกะ
ใช้โอเปอเรเตอร์การกําหนดค่าเพื่อกําหนดค่าของโอเปอเรเตอร์ที่ 2 ให้กับโอเปอเรเตอร์ที่ 1 ตัวอย่างที่พบบ่อยที่สุดของรูปแบบนี้คือเครื่องหมายเท่ากับเดี่ยว (=) ซึ่งใช้เพื่อกำหนดค่าให้กับตัวแปรที่ประกาศ
ใช้โอเปอเรเตอร์การกําหนดค่าเชิงตรรกะเพื่อกําหนดค่าให้กับตัวแปรตามเงื่อนไข โดยอิงตามค่าที่เป็นจริงหรือเท็จของตัวแปรนั้น
โอเปอเรเตอร์การกําหนดค่าเชิงตรรกะ AND (&&=) จะประเมินโอเปอเรเตอร์ที่ 2 และกำหนดค่าให้กับโอเปอเรเตอร์ที่ 1 เฉพาะในกรณีที่โอเปอเรเตอร์ที่ 1 ประเมินเป็น true ซึ่งหมายความว่า "หากโอเปอเรเตอร์ที่ 1 เป็นจริง ให้กําหนดค่าของโอเปอเรเตอร์ที่ 2 แทน"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
ค่าที่ตรงตามเงื่อนไขหรือไม่ตรงตามเงื่อนไขของอาเรย์แรกจะเป็นตัวกำหนดว่าจะมีการดำเนินการกำหนดค่าหรือไม่ อย่างไรก็ตาม การพยายามประเมินโอเปอเรนด์แรกโดยใช้โอเปอเรเตอร์การเปรียบเทียบจะส่งผลให้เกิดบูลีน true หรือ false ซึ่งไม่สามารถกําหนดค่าได้
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
โอเปอเรเตอร์การกําหนดค่า OR เชิงตรรกะ (||=) จะประเมินโอเปอเรเตอร์ที่ 2 และกำหนดค่าให้กับโอเปอเรเตอร์ที่ 1 หากโอเปอเรเตอร์ที่ 1 ประเมินผลเป็น false ซึ่งหมายความว่า "หากโอเปอเรเตอร์ที่ 1 เป็นเท็จ ให้กําหนดค่าของโอเปอเรเตอร์ที่ 2 แทน"
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
ทดสอบความเข้าใจ
โอเปอเรเตอร์ใดที่ระบุว่า "เท่ากับทุกประการ"
======!=