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
}
santai saja
sumber
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

MattW
sumber
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;
tidak terdefinisi
sumber
43

Ada operator ternary, seperti ini:

var c = (a < b) ? "a is less than b"  : "a is not less than b";
Mahmoud Gamal
sumber
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.

Pebbl
sumber
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;
Onimusha
sumber
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' );
HyderA
sumber
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.

Nahn
sumber
17

Anda bisa melakukan ini di JavaScript:

a < b ? passed() : failed();
Ivar
sumber
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.

alan
sumber
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 ) );
kurt
sumber
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";
Anoop
sumber
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.)

Jay Edwards
sumber
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');
Sammy
sumber