Javacript ใช้การประเมินผลการลัดวงจรสำหรับผู้ประกอบการเชิงตรรกะและ||
อย่างไรก็ตามมันแตกต่างจากภาษาอื่น ๆ โดยที่มันจะส่งคืนผลลัพธ์ของค่าสุดท้ายที่หยุดการดำเนินการแทนค่าหรือค่า&&
true
false
ค่าต่อไปนี้ถือว่าเป็นเท็จใน JavaScript
- เท็จ
- โมฆะ
""
(สตริงว่าง)
- 0
- น่าน
- ไม่ได้กำหนด
การเพิกเฉยต่อกฎสำคัญของโอเปอเรเตอร์และทำให้สิ่งต่าง ๆ เรียบง่ายตัวอย่างต่อไปนี้แสดงค่าที่หยุดการประเมินและได้รับผลลัพธ์
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
ค่า 5 อันดับแรกเกินNaN
จริงดังนั้นค่าทั้งหมดจะถูกประเมินจากซ้ายไปขวาจนกระทั่งตรงตามค่าจริงแรก"Hello"
ซึ่งทำให้การแสดงออกทั้งหมดเป็นจริงดังนั้นสิ่งใดที่เกินจะไม่ถูกประเมินและ"Hello"
ได้รับผลตอบแทนจากการแสดงออก . ในทำนองเดียวกันในกรณีนี้:
1 && [] && {} && true && "World" && null && 2010 // null
5 ค่าแรกนั้นเป็นความจริงทั้งหมดและได้รับการประเมินจนกว่าจะตรงตามค่า falsy แรก ( null
) ซึ่งทำให้นิพจน์เป็นเท็จดังนั้น2010
จะไม่ถูกประเมินอีกต่อไปและnull
ได้รับผลตอบแทนจากการแสดงออก
ตัวอย่างที่คุณได้รับคือการใช้คุณสมบัตินี้ของ JavaScript เพื่อดำเนินการมอบหมาย มันสามารถใช้งานได้ทุกที่ที่คุณต้องได้รับความจริงหรือเป็นเท็จค่าแรกในชุดของค่า รหัสด้านล่างนี้จะกำหนดค่า"Hello"
ให้b
เนื่องจากทำให้ง่ายต่อการกำหนดค่าเริ่มต้นแทนที่จะทำการตรวจสอบถ้าอื่น
var a = false;
var b = a || "Hello";
คุณสามารถเรียกตัวอย่างด้านล่างนี้เป็นการใช้ประโยชน์จากคุณลักษณะนี้และฉันเชื่อว่ามันทำให้โค้ดอ่านยากขึ้น
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
ภายในการแจ้งเตือนเราตรวจสอบว่าmessages
เป็น falsy และถ้าใช่แล้วประเมินและผลตอบแทนอย่างอื่นในการประเมินและผลตอบแทนnoNewMessagesText
newMessagesText
เนื่องจากเป็น falsy ในตัวอย่างนี้เราหยุดที่ noNewMessagesText "Sorry, you have no new messages."
และการแจ้งเตือน
$f=$a or $f=$b or $f=$c; // etc
มีการสร้างคุณสามารถใช้: PHP มีทั้ง||
โอเปอเรเตอร์และor
โอเปอเรเตอร์ซึ่งทำงานเหมือนกัน อย่างไรก็ตามor
จะมีการประเมินหลังการมอบหมายในขณะที่||
ประเมินก่อน สิ่งนี้ยังทำให้คุณมีสไตล์ที่ไม่เหมือนใครของ$a=getSomething() or die('oops');