Bagaimana cara menulis pernyataan IF inline dalam JavaScript?


286

Bagaimana saya bisa menggunakan ifpernyataan inline dalam JavaScript? Apakah ada elsepernyataan inline juga?

Sesuatu seperti ini:

var a = 2;
var b = 3;

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

12
Di mana jQuery di sini? Dan saya tidak begitu mengerti pertanyaannya.
Marc

bagian jquery mungkin seperti $ ini (dokumen). Sudah (function () {var a = 2; var b = 3; if (a <b) {// do something}});
takeItEasy

itu pertanyaan knockoutjs juga
Martin Capodici

1
Ini juga merupakan sudut 1 dan 2 dan setiap kerangka kerja js lainnya (termasuk vanilla.js) di luar sana pertanyaan
Ben Taliadoros

Jawaban:


641

Anda tidak perlu jQuery. JavaScript sendiri akan melakukan ini.

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

The cvariabel akan minorjika nilai true, dan majorjika nilai false.


Ini dikenal sebagai Operator Bersyarat (ternary).

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


59
Ini menggambarkan cara menggunakan Inline IF, yang menjawab pertanyaan PERSIS.
MattW

26
Sebagai catatan, semua parens dalam hal ini adalah opsional. Seringkali gaya preferensi / pengkodean pribadi yang menentukan kapan digunakan.
Will Klein

3
@khany, ini pertanyaan JavaScript. Ekspresi dapat mengevaluasi dalam bahasa lain secara berbeda.
Will Klein

1
@MattW Ini tidak menunjukkan cara menggunakan Inline IF, ini menunjukkan cara menggunakan IF ELSE
Finlay Percy

1
@getName tidak benar-benar, tetapi Anda dapat menggunakan satu baris jika pernyataan jika Anda mauif (a < b) c = 'major';
MattW

44

Untuk menulis ifinline pernyataan, kode di dalamnya hanya boleh satu pernyataan:

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

43

Ada operator ternary, seperti ini:

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

4
Sebenarnya tidak harus ditugaskan untuk apa pun. Elemen sisi kanan bisa dengan mudah menjadi pemanggilan fungsi.
jfriend00

7
Mereka bahkan tidak harus menjadi pemanggilan fungsi ... 0 < 1 : 5 : 120;adalah pernyataan yang benar-benar valid. Sedikit tidak berguna kecuali Anda dibayar per baris.
Ry-

Ok, @ jfriend00, minitech, Terima kasih atas tipsnya.
Mahmoud Gamal

@ jfriend00 Saya akan menyarankan untuk tidak melakukannya di hampir semua kasus. Jika Anda tidak menggunakan nilai ekspresi, maka yang Anda inginkan adalah efek samping; dan efek samping adalah pernyataan yang bagus untuk apa. Menggunakan ifpernyataan membosankan lama yang biasa dalam kasus seperti itu mungkin akan membuat kode Anda lebih mudah dibaca dan dipahami, dan kecil kemungkinannya untuk dipecahkan dengan perubahan selanjutnya.
Emil Lundberg

35

Anda juga dapat memperkirakan suatu if / else dengan hanya menggunakan Logical Operator.

(a && b) || c

Di atas kira-kira sama dengan mengatakan:

a ? b : c

Dan tentu saja, kira-kira sama dengan:

if ( a ) { b } else { c }

Saya katakan secara kasar karena ada satu perbedaan dengan pendekatan ini, yaitu Anda harus tahu bahwa nilai bakan dinilai benar, jika tidak, Anda akan selalu mendapatkannya c. Pada dasarnya Anda harus menyadari bahwa bagian yang akan muncul if () { here }sekarang adalah bagian dari kondisi yang Anda tempatkan if ( here ) { }.

Di atas dimungkinkan karena perilaku JavaScripts melewati / mengembalikan salah satu nilai asli yang membentuk ekspresi logis, yang tergantung pada jenis operator. Bahasa-bahasa lain tertentu, seperti PHP, meneruskan hasil operasi yang sebenarnya yaitu benar atau salah, artinya hasilnya selalu benar atau salah; misalnya:

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 {}

Satu manfaat utama, dibandingkan dengan pernyataan normal jika, adalah bahwa dua metode pertama dapat beroperasi di sisi kanan argumen yaitu sebagai bagian dari tugas.

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

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

Satu-satunya cara untuk mencapai ini dengan standar jika pernyataan akan menduplikasi tugas:

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

Anda mungkin bertanya mengapa penggunaan hanya Logical Operator bukan Ternary operator , untuk kasus sederhana Anda mungkin tidak akan, kecuali jika Anda ingin memastikan adan bberdua benar. Anda juga dapat mencapai kondisi rumit yang lebih ramping dengan operator Logical, yang dapat menjadi sangat berantakan dengan menggunakan operasi bersarang bersarang ... lalu lagi jika Anda ingin kode Anda mudah dibaca, tidak ada yang terlalu intuitif.


32

Dalam bahasa Inggris biasa, sintaks menjelaskan:

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

Dapat ditulis sebagai:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

5
Apakah mungkin untuk melakukan ini tanpa pernyataan "lain"? yaitucondition ? true
Pengacara Setan

@ScottBeeson Tentu. Ini juga tergantung pada penggunaan kondisi Anda. true falsedan ""semua harus baik-baik saja untuk mengabaikan bagian yang lain.
Onimusha

Jadi 2 == 2 ? doSomething()akan sama dengan if (2 == 2) doSomething()?
Pengacara Setan

1
Ya, tetapi bagian lain tidak dapat sepenuhnya dihilangkan. Di sewa : falseatau : ""harus ada karena javascript mengharapkan ini.
Onimusha

5
Oh Jadi tidak mungkin melakukannya tanpa pernyataan orang lain.
Pengacara Setan

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

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

48
Aku bahkan tidak tahu apa yang baru saja kubaca, tapi aku tertawa terbahak-bahak.
Jazz

20

Jika Anda hanya menginginkan IF inline (tanpa ELSE), Anda dapat menggunakan operator logika DAN:

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

Jika Anda membutuhkan ELSE juga, gunakan operasi ternary yang disarankan orang lain.


17

Anda bisa melakukan ini di JavaScript:

a < b ? passed() : failed();

8

FYI, Anda dapat membuat operator bersyarat

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

Jika logika Anda cukup kompleks, maka Anda dapat mempertimbangkan untuk menggunakan IIFE

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

Tentu saja, jika Anda berencana untuk menggunakan logika ini lebih dari sekali, maka Anda harus merangkumnya dalam fungsi untuk menjaga hal-hal baik dan KERING.


6

Saya sering perlu menjalankan lebih banyak kode per kondisi, dengan menggunakan: ( , , )beberapa elemen kode dapat menjalankan:

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

Untuk menambahkan ini, Anda juga dapat menggunakan sebaris jika kondisi dengan && dan || operator. Seperti ini

var a = 2;
var b = 0;

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

0

Bukankah pertanyaannya pada dasarnya: dapatkah saya menulis yang berikut?

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

jawabannya adalah, ya, terjemahan di atas akan diterjemahkan.

Namun, berhati-hatilah dengan melakukan hal berikut

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

pastikan untuk membungkus kode ambigu dalam kurung kurawal karena hal di atas akan mengeluarkan pengecualian (dan permutasi yang sama akan menghasilkan perilaku yang tidak diinginkan.)


0

sebaris jika:

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

kesimpulan kebenaran: pernyataan dieksekusi ketika hipotesis benar

kesimpulan falsey: pernyataan dieksekusi ketika hipotesis salah

contoh anda:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.