จะเขียนคำสั่ง IF แบบอินไลน์ใน JavaScript ได้อย่างไร


286

ฉันจะใช้ifคำสั่งinline ใน JavaScript ได้อย่างไร มีelseคำสั่งแบบอินไลน์ด้วยหรือไม่

บางสิ่งเช่นนี้

var a = 2;
var b = 3;

if(a < b) {
    // do something
}

12
jQuery อยู่ที่นี่ที่ไหน และฉันก็ไม่เข้าใจคำถามจริงๆ
Marc

ส่วน jquery อาจเป็นเช่นนี้ $ (เอกสาร). ready (function () {var a = 2; var b = 3; ถ้า (a <b) {// do some}});
takeItEasy

มันเป็นคำถามที่น่าพิศวงเช่นกัน
มาร์ตินคาโปดิซี่

1
นอกจากนี้ยังเป็นมุมฉาก 1 และ 2 และกรอบ js อื่น ๆ (รวมถึง vanilla.js) ด้วยคำถาม
Ben Taliadoros

คำตอบ:


642

คุณไม่จำเป็นต้องมี jQuery JavaScript เพียงอย่างเดียวจะทำสิ่งนี้

var a = 2;
var b = 3;    
var c = ((a < b) ? 'minor' : 'major');

cตัวแปรจะเป็นminorถ้าค่าtrueและถ้ามีค่าเป็นmajorfalse


เรื่องนี้เป็นที่รู้จักในฐานะผู้ประกอบการเงื่อนไข (ประกอบ)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator


59
มันแสดงให้เห็นถึงวิธีการใช้ Inline IF ซึ่งตอบคำถามอย่างแน่นอน
MattW

26
เพียงเพื่อทราบ parens ทั้งหมดในกรณีนี้เป็นตัวเลือก มันมักจะเป็นความชอบส่วนบุคคล / รูปแบบการเข้ารหัสที่กำหนดเมื่อมีการใช้
Will Klein

3
@ KHany นี่เป็นคำถาม JavaScript นิพจน์อาจประเมินเป็นภาษาอื่นต่างกัน
Will Klein

1
@MattW สิ่งนี้ไม่แสดงวิธีใช้ Inline IF มันแสดงวิธีใช้ IF ELSE
Finlay Percy

1
@getName ไม่ได้จริงๆ แต่คุณสามารถใช้หนึ่งบรรทัดคำสั่งถ้าหากคุณต้องการif (a < b) c = 'major';
MattW

44

สำหรับการเขียนifข้อความสั่งแบบอินไลน์โค้ดที่อยู่ภายในควรเป็นเพียงหนึ่งข้อความ:

if ( a < b ) // code to be executed without curly braces;

43

มีผู้ประกอบการที่ประกอบไปด้วยเช่นนี้:

var c = (a < b) ? "a is less than b"  : "a is not less than b";

4
ไม่จำเป็นต้องกำหนดให้กับสิ่งใด องค์ประกอบด้านขวามือสามารถเรียกใช้ฟังก์ชันได้
jfriend00

7
พวกเขาไม่จำเป็นต้องมีการเรียกใช้ฟังก์ชัน ... 0 < 1 : 5 : 120;เป็นคำสั่งที่สมบูรณ์แบบ แม้ว่าจะไร้ประโยชน์เล็กน้อยเว้นแต่ว่าคุณจะได้รับเงินต่อบรรทัด
Ry-

ตกลง, @ jfriend00, minitech ขอบคุณสำหรับคำแนะนำ
Mahmoud Gamal

@ jfriend00 ฉันจะแนะนำกับมันในเกือบทุกกรณีแม้ว่า หากคุณไม่ได้ใช้คุณค่าของการแสดงออกสิ่งที่คุณต้องการจริงๆคือผลข้างเคียง และผลข้างเคียงคือข้อความที่ดีสำหรับ การใช้ifคำสั่งเบื่อง่ายแบบเก่าในกรณีเช่นนี้อาจทำให้โค้ดของคุณง่ายต่อการอ่านและเข้าใจมากขึ้นและมีโอกาสน้อยที่จะทำลายการเปลี่ยนแปลงในภายหลัง
Emil Lundberg

35

คุณสามารถประมาณถ้า / อื่นโดยใช้ตัวดำเนินการทางตรรกะเท่านั้น

(a && b) || c

ด้านบนเป็นคร่าวๆเช่นเดียวกับการพูด:

a ? b : c

และแน่นอนประมาณเช่นเดียวกับ:

if ( a ) { b } else { c }

ฉันพูดประมาณเพราะมีหนึ่งความแตกต่างด้วยวิธีนี้ในการที่คุณจะต้องรู้ว่าค่าของจะประเมินเป็นจริงมิฉะนั้นคุณก็จะได้รับb cโดยพื้นฐานแล้วคุณต้องตระหนักว่าส่วนที่จะปรากฏif () { here }นั้นเป็นส่วนหนึ่งของเงื่อนไขที่คุณวางif ( here ) { }ไว้

ด้านบนเป็นไปได้เนื่องจากพฤติกรรม JavaScript ของการส่ง / ส่งกลับหนึ่งในค่าดั้งเดิมที่เกิดขึ้นในการแสดงออกทางตรรกะซึ่งหนึ่งขึ้นอยู่กับประเภทของผู้ประกอบการ บางภาษาอื่น ๆ เช่น PHP ดำเนินการกับผลลัพธ์ที่แท้จริงของการดำเนินการเช่นจริงหรือเท็จหมายถึงผลลัพธ์ที่ได้จริงหรือเท็จเสมอ เช่น:

14 && 0          /// results as 0,  not false
14 || 0          /// results as 14, not true
1 && 2 && 3 && 4 /// results as 4,  not true
true && ''       /// results as ''
{} || '0'        /// results as {}

ประโยชน์หลักอย่างหนึ่งเมื่อเปรียบเทียบกับคำสั่ง if ปกติคือสองวิธีแรกสามารถทำงานบนด้านขวาของอาร์กิวเมนต์เช่นเป็นส่วนหนึ่งของการมอบหมาย

d = (a && b) || c;
d = a ? b : c;

if `a == true` then `d = b` else `d = c`

วิธีเดียวที่จะทำให้สิ่งนี้บรรลุผลสำเร็จด้วยมาตรฐานหากคำสั่งนั้นเป็นการทำซ้ำการกำหนด:

if ( a ) { d = b } else { d = c }

คุณอาจถามว่าทำไมใช้แค่Logical Operatorsแทนที่จะเป็นTernary Operatorสำหรับกรณีง่ายๆที่คุณอาจจะทำไม่ได้เว้นแต่คุณต้องการให้แน่ใจaและbเป็นจริงทั้งคู่ นอกจากนี้คุณยังสามารถบรรลุเงื่อนไขที่ซับซ้อนที่ซับซ้อนยิ่งขึ้นด้วยตัวดำเนินการ Logical ซึ่งอาจยุ่งเหยิงโดยใช้การดำเนินการที่ซ้อนกัน ... จากนั้นอีกครั้งถ้าคุณต้องการให้โค้ดของคุณสามารถอ่านได้ง่ายไม่ว่าจะเป็นสัญชาตญาณจริงๆ


32

ในภาษาอังกฤษธรรมดาไวยากรณ์อธิบาย:

if(condition){
    do_something_if_condition_is_met;
}
else{
    do_something_else_if_condition_is_not_met;
}

สามารถเขียนเป็น:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

5
เป็นไปได้ไหมที่จะทำสิ่งนี้โดยไม่มีคำสั่ง "else"? iecondition ? true
Devil's Advocate

@ScottBeeson แน่นอน นอกจากนี้ยังขึ้นอยู่กับการใช้งานของเงื่อนไข true falseและ""ควรจะดีที่จะไม่สนใจส่วนอื่น
Onimusha

ดังนั้น2 == 2 ? doSomething()จะเป็นเช่นเดียวกับif (2 == 2) doSomething()?
ผู้ให้การสนับสนุนของปีศาจ

1
ใช่ แต่ไม่สามารถละเว้นส่วนอื่นได้อย่างสมบูรณ์ อย่าง: falseน้อย: ""ควรให้มี javascript หรือคาดหวังสิ่งนี้
Onimusha

5
โอ้ ดังนั้นจึงเป็นไปไม่ได้ที่จะทำโดยไม่มีคำสั่งอื่น
ผู้สนับสนุนปีศาจ

21
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );

48
ฉันไม่รู้ด้วยซ้ำว่าฉันเพิ่งอ่านอะไร แต่ฉันหัวเราะอย่างหนัก
แจ๊ส

20

หากคุณต้องการอินไลน์ IF (ไม่มี ELSE) คุณสามารถใช้ตัวดำเนินการตรรกะและตัวดำเนินการ:

(a < b) && /*your code*/;

หากคุณต้องการ ELSE ให้ใช้การดำเนินการแบบไตรภาคที่บุคคลอื่นแนะนำ



8

FYI คุณสามารถเขียนโอเปอเรเตอร์ที่มีเงื่อนไข

var a = (truthy) ? 1 : (falsy) ? 2 : 3;

หากตรรกะของคุณซับซ้อนเพียงพอคุณอาจพิจารณาใช้IIFE

var a = (function () {
  if (truthy) return 1;
  else if (falsy) return 2;
  return 3;
})();

แน่นอนถ้าคุณวางแผนที่จะใช้ตรรกะนี้มากกว่าหนึ่งครั้งคุณควรใส่ในฟังก์ชันเพื่อให้สิ่งที่ดีและแห้ง


6

ฉันมักจะต้องเรียกใช้รหัสเพิ่มเติมตามเงื่อนไขโดยใช้: ( , , )องค์ประกอบของรหัสหลาย ๆ สามารถเรียกใช้:

var a = 2;
var b = 3;
var c = 0;

( a < b ?  ( alert('hi'), a=3, b=2, c=a*b ) : ( alert('by'), a=4, b=10, c=a/b ) );

4

หากต้องการเพิ่มในส่วนนี้คุณสามารถใช้แบบอินไลน์ได้หากเงื่อนไขกับ && และ || ผู้ประกอบการ แบบนี้

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";

0

ไม่ใช่คำถามหลัก: ฉันสามารถเขียนต่อไปนี้?

if (foo)
  console.log(bar)
else
  console.log(foo + bar)

คำตอบคือใช่ข้างต้นจะแปล

อย่างไรก็ตามระวังการทำดังต่อไปนี้

if (foo)
  if (bar)
    console.log(foo)
  else 
    console.log(bar)
else 
  console.log(foobar)

ต้องแน่ใจว่าได้ห่อโค้ดที่คลุมเครือด้วยการจัดฟันเนื่องจากข้อยกเว้นข้างต้นจะทำให้เกิดข้อยกเว้น (และการเรียงสับเปลี่ยนที่คล้ายกันจะทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์)


0

อินไลน์หาก:

(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')

ข้อสรุปจริง: งบดำเนินการเมื่อสมมติฐานเป็นจริง

ข้อสรุปเท็จ: งบดำเนินการเมื่อสมมติฐานเป็นเท็จ

ตัวอย่างของคุณ:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.