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

โอเปอเรเตอร์การเปรียบเทียบจะเปรียบเทียบค่าของตัวถูกดำเนินการ 2 รายการ และประเมินว่าคำสั่งที่สร้างขึ้นเป็น true หรือ false ตัวอย่างต่อไปนี้ใช้โอเปอเรเตอร์ strict equality (===) เพื่อเปรียบเทียบตัวถูกดำเนินการ 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 ซึ่งมักเรียกกันว่าค่า "truthy" และ "fulsy"

"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

นิพจน์ตรรกะ NOT (!) จะลบค่าที่แท้จริงหรือไม่ถูกต้องของตัวถูกดำเนินการ ประเมินเป็น 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 ไม่ได้บีบบังคับใดๆ ด้วยตัวเอง โดยจะส่งคืนค่าของตัวถูกดำเนินการ 1 ตัวจาก 2 ตัวที่กำลังประเมิน โดยตัวถูกดำเนินการที่เลือกซึ่งกำหนดโดยการประเมินนั้น

ตัวดำเนินการตรรกะ AND (&&) จะแสดงผลตัวถูกดำเนินการแรกจาก 2 ตัวก็ต่อเมื่อตัวถูกดำเนินการนั้นๆ ประเมินค่าเป็น false และตัวถูกดำเนินการตัวที่สองเป็นอย่างอื่น ในการเปรียบเทียบที่ประเมินเป็นค่าบูลีน ระบบจะแสดง true ก็ต่อเมื่อตัวถูกดำเนินการทั้ง 2 ฝั่งของตรรกะ 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"

Logical OR (||) จะแสดงผลตัวถูกดำเนินการแรกจาก 2 ตัวก็ต่อเมื่อตัวถูกดำเนินการนั้นๆ ประเมินเป็น true และตัวถูกดำเนินการตัวที่สองเป็นอย่างอื่น ในการเปรียบเทียบที่ประเมินกับค่าบูลีน หมายความว่าค่านี้จะแสดงผล 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

เปิดตัวในปี 2020 "โอเปอเรเตอร์การประสานงานที่เป็นค่าว่าง" (??) จะแสดงผลตัวถูกดำเนินการแรกก็ต่อเมื่อตัวถูกดำเนินการดังกล่าวมีค่าอื่นที่ไม่ใช่ null หรือ undefined มิเช่นนั้น ตัวถูกดำเนินการ ที่สองจะแสดงขึ้นมา

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 ให้กับโอเปอเรเตอร์แรก ตัวอย่างที่พบบ่อยที่สุดคือเครื่องหมายเท่ากับเดี่ยว (=) ซึ่งใช้ในการกำหนดค่าให้กับตัวแปรที่ประกาศ

ใช้โอเปอเรเตอร์การกำหนดเชิงตรรกะเพื่อกำหนดค่าให้กับตัวแปรแบบมีเงื่อนไขตามค่าที่แท้จริงหรือค่าที่ไม่เป็นจริงของตัวแปรนั้น

โอเปอเรเตอร์ตรรกะ AND (&&=) จะประเมินตัวถูกดำเนินการตัวที่ 2 และกําหนดให้กับตัวถูกดำเนินการแรกในกรณีที่ตัวถูกดำเนินการแรกจะประเมินตัวถูกดำเนินการแรกเป็น true ได้อย่างมีประสิทธิภาพ "หากตัวถูกดำเนินการแรกเป็นจริง ให้กำหนดค่าของตัวถูกดำเนินการตัวที่ 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 (||=) จะประเมินตัวถูกดำเนินการที่สองและกำหนดให้กับตัวถูกดำเนินการแรกหากตัวถูกดำเนินการแรกประเมินเป็น false ซึ่งมีประสิทธิภาพ "หากตัวถูกดำเนินการแรกเป็นเท็จ ให้กำหนดค่าของตัวถูกดำเนินการที่สองแทน"

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

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

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

===
==
=
!=