โอเปอเรเตอร์การเปรียบเทียบ

โอเปอเรเตอร์การเปรียบเทียบจะเปรียบเทียบค่าของโอเปอเรนด์ 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

ทดสอบความเข้าใจ

โอเปอเรเตอร์ใดที่ระบุว่า "เท่ากับทุกประการ"

===
==
=
!=