โอเปอเรเตอร์การเปรียบเทียบจะเปรียบเทียบค่าของโอเปอเรนด์ 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
0
null
undefined
NaN
- สตริงว่าง (
""
)
ระบบจะบังคับให้ค่าอื่นๆ ทั้งหมดเป็น 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
ทดสอบความเข้าใจ
โอเปอเรเตอร์ใดที่ระบุว่า "เท่ากับทุกประการ"
===
==
=
!=