ไวยากรณ์“ elseif” ใน JavaScript


คำตอบ:


507

elseif ของ JavaScript อยู่ในรูปแบบ "else if" เช่น:

if (condition) {

} else if (other_condition) {

} else {

}

28
เมื่อมีคนถามคำถามเช่นนี้ฉันคิดว่ามันแสดงให้เห็นถึงความเข้าใจผิดขั้นพื้นฐาน ด้วยifและelseไม่มีความจำเป็นelseifจริงๆ
mpen

14
@ Mark ฉันเห็นด้วย ... แต่บางครั้งฉันก็สับสนเพราะฉันคุ้นเคยกับภาษาที่มีอย่างอื่น ฉันรู้ว่ามันเหมือนกัน แต่ฉันสงสัยว่าเหตุผลของจาวาสคริปต์คืออะไร ฉันดีใจ แต่ที่พวกเขาไม่ได้ใช้ elif เพราะที่ผิดเพียง :)
เจ K

16
@ JayK: ฮ่าฮ่า .. PHP มีelseif, Perl มีelsif(ฉันคิดว่า) และ Python มีelif.. ตอนนั้นฉันรำคาญแบบนั้น แต่ ... ฉันคิดว่ามันน่ารักดี มันมีจุดประสงค์เล็กน้อยใน Python และ PHP เพราะมันจะไม่ทำงานกับไวยากรณ์ลำไส้ใหญ่เป็นอย่างอื่น
mpen

6
@ Mark มันยิ่งแสดงให้เห็นถึงความเข้าใจผิดของการถ่ายคร่อม วงเล็บไม่จำเป็นสำหรับif/ elseบล็อก แต่ผู้ใช้ควรได้รับการสนับสนุนดังนั้นฉันสามารถเข้าใจได้ว่าทำไมผู้ใช้ใหม่ถึงดูไม่ถูกต้อง

46
@ Mark เพื่ออ้างว่าไม่มีเหตุผลที่จะใช้ "else ถ้า" ไม่ถูกต้อง ถ้าคำสั่งนั้นคล้ายกับการใช้ "สวิตช์" อย่างไรก็ตามมันจะช่วยให้การเปรียบเทียบที่ซับซ้อนยิ่งขึ้น แน่นอนว่าสวิทช์ช่วยให้การเปรียบเทียบง่ายมากเท่านั้น ใช่มีเหตุผลที่ดีสำหรับการใช้อย่างอื่นถ้า
jolsen


33

คุณสามารถใช้ไวยากรณ์นี้ซึ่งเทียบเท่ากับการทำงาน:

switch (true) {
  case condition1:
     //e.g. if (condition1 === true)
     break;
  case condition2:
     //e.g. elseif (condition2 === true)
     break;
  default:
     //e.g. else
}

สิ่งนี้ใช้งานได้เพราะแต่ละconditionอย่างถูกประเมินอย่างสมบูรณ์ก่อนที่จะเปรียบเทียบกับswitchค่าดังนั้นสิ่งแรกที่ประเมินว่าtrueจะตรงกันและสาขาของมันจะทำงาน สาขาที่ตามมาจะไม่ดำเนินการหากคุณจำได้ว่าจะใช้breakจำไว้ว่าให้ใช้

โปรดทราบว่ามีการใช้การเปรียบเทียบอย่างเข้มงวดดังนั้นสาขาที่มีconditionเพียง "ความจริง" จะไม่ถูกดำเนินการ คุณสามารถสร้างคุณค่าที่เป็นความจริงtrueด้วยการปฏิเสธคู่: !!condition.


นี่ไม่ใช่ AFAIK ที่เทียบเท่ากับการใช้งาน สิ่งที่คุณสามารถใส่ในเงื่อนไขมี จำกัด มากขึ้นและswitch (true)ไม่ได้ทำให้รู้สึก
zwol

2
ฉันยอมรับว่ามันดูแปลก ๆ ในตอนแรก แต่ก็เทียบเท่ากัน เงื่อนไขสามารถเป็นอะไรก็ได้ที่คุณชอบ (รวมถึงฟังก์ชั่นการโทรหรืออะไรก็ตาม) และถ้าประเมินtrueแล้วว่ากรณีจะได้พบกัน - else ifเหมือน
Tamlyn

5
โอ้ฉันเห็นสิ่งที่คุณทำตอนนี้ นั่นช่างฉลาดทีเดียว (ฉันเพิ่มย่อหน้าที่อธิบายวิธีการทำงานเพื่อที่ฉันจะสามารถถอนการ
โหวต

1
นี่เป็นวิธีการแก้ปัญหาที่ง่ายสะอาดและสง่างามสำหรับรายการเงื่อนไขที่มีมากกว่า 1 "เงื่อนไขอื่น ๆ " เงื่อนไข
Steve Goossens

4
ไม่เท่าเทียมกันอย่างสมบูรณ์หากเงื่อนไขไม่ส่งคืนบูลีนเช่นif([]) alert('a')สร้างการแจ้งเตือน แต่switch(true){case []:alert('a')}ไม่ นั่นเป็นเพราะ[]ค่าความจริง แต่ไม่เท่ากับtrueตามที่ @zwol อธิบายไว้ในการแก้ไขนี้
Oriol

13

ที่จริงแล้วทางเทคนิคเมื่อเยื้องอย่างถูกต้องก็จะเป็น:

if (condition) {
    ...
} else {
    if (condition) {
        ...
    } else {
        ...
    }
}

ไม่มีการelse ifพูดอย่างเคร่งครัด

(อัปเดต: แน่นอนตามที่กล่าวไว้ข้างต้นไม่ถือว่าเป็นสไตล์ที่ดี)


1
if (condition1) { ... } else if (condition2) { ... } else { ... }คุณสามารถและคุณควรจะเขียนนี้
zwol

4
ในสาระสำคัญเมื่อใช้คุณเป็นจริงถนัดบล็อกตัวเลือกelse if {...}ฉันอ้างอิงจากEMCAScriptและMDN ..
skube

13
ในแง่ของไวยากรณ์อย่างเป็นทางการของภาษาคุณถูกต้อง แต่คำตอบของคุณอาจทำให้ผู้คนรู้สึกไม่ถูกต้อง else { if ... }รูปแบบที่ดี
zwol

1
สิ่งที่ซโวลพูด มีสิ่งที่คุณ (skube) หมายถึง .. แล้วก็มีสิ่งที่คุณพูด
เจอราร์ดโอนีล


2

คำสั่งแบบมีเงื่อนไขจะใช้เพื่อดำเนินการต่าง ๆ ตามเงื่อนไขที่แตกต่างกัน

ใช้ ifเพื่อระบุบล็อกของรหัสที่จะดำเนินการหากเงื่อนไขที่ระบุเป็นจริง

ใช้ elseเพื่อระบุบล็อกของรหัสที่จะดำเนินการหากเงื่อนไขเดียวกันเป็นเท็จ

ใช้else ifเพื่อระบุเงื่อนไขใหม่เพื่อทดสอบหากเงื่อนไขแรกเป็นเท็จ


1
x = 10;
if(x > 100 ) console.log('over 100')
else if (x > 90 ) console.log('over 90')
else if (x > 50 ) console.log('over 50')
else if (x > 9 ) console.log('over 9')
else console.log('lower 9') 

0

คุณไม่มีที่ว่างระหว่างelseและif

มันควรจะเป็นelse ifแทนelseif

if(condition)
{

} 
else if(condition)
{

}
else
{

}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.