โอเปอเรเตอร์การเปรียบเทียบจะเปรียบเทียบค่าของตัวถูกดำเนินการ 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
ทดสอบความเข้าใจ
โอเปอเรเตอร์ใดที่ระบุว่า "เท่ากันทุกประการ"
===
==
=
!=