Làm cách nào để viết một câu lệnh IF nội tuyến trong JavaScript?


286

Làm cách nào tôi có thể sử dụng một ifcâu lệnh nội tuyến trong JavaScript? Có một nội tuyếnelse tuyên bố quá?

Một cái gì đó như thế này:

var a = 2;
var b = 3;

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

12
JQuery ở đâu? Và tôi không thực sự hiểu câu hỏi nào.
Marc

phần jquery có thể giống như $ (tài liệu). yet (function () {var a = 2; var b = 3; if (a <b) {// do Something}});
TakeIt Easy

đó cũng là một câu hỏi loại trực tiếp
Martin Capodici

1
Đây cũng là một khung 1 và 2 góc cạnh và mọi khung js khác (bao gồm cả vanilla.js) ngoài kia
Ben Taliadoros

Câu trả lời:


641

Bạn không nhất thiết cần jQuery. JavaScript một mình sẽ làm điều này.

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

Các cbiến sẽ là minornếu giá trị là true, và majornếu giá trị là false.


Điều này được gọi là một toán tử có điều kiện (ternary).

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


59
Nó minh họa cách sử dụng IF nội tuyến, trả lời chính xác câu hỏi.
MattW

26
Chỉ cần lưu ý, tất cả các parens trong trường hợp này là tùy chọn. Nó thường là sở thích cá nhân / phong cách mã hóa chỉ ra khi chúng được sử dụng.
Will Klein

3
@khany, đây là một câu hỏi JavaScript. Biểu thức có thể đánh giá trong các ngôn ngữ khác nhau.
Will Klein

1
@MattW Điều này không chỉ ra cách sử dụng IF nội tuyến, nó chỉ ra cách sử dụng IF ELSE
Finlay Percy

1
@getName không thực sự, nhưng bạn có thể sử dụng một câu lệnh if nếu bạn muốnif (a < b) c = 'major';
MattW

44

Để viết ifcâu lệnh nội tuyến, mã bên trong của nó chỉ nên là một câu lệnh:

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

43

Có một toán tử ternary, như thế này:

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

4
Nó không thực sự phải được chỉ định cho bất cứ điều gì. Các yếu tố phía bên tay phải có thể chỉ đơn giản là các cuộc gọi chức năng.
jfriend00

7
Họ thậm chí không phải gọi hàm ... 0 < 1 : 5 : 120;là một tuyên bố hoàn toàn hợp lệ. Một chút vô dụng trừ khi bạn trả tiền trên mỗi dòng, mặc dù.
Ry-

Ok, @ jfriend00, minitech, Cảm ơn vì lời khuyên.
Trò chơi Mahmoud

@ jfriend00 Tôi sẽ khuyên chống lại nó trong hầu hết các trường hợp, mặc dù. Nếu bạn không sử dụng giá trị của biểu thức, thì điều bạn thực sự muốn là tác dụng phụ; và tác dụng phụ là những gì tuyên bố là tuyệt vời cho. Sử dụng ifcâu lệnh nhàm chán cũ đơn giản trong trường hợp như vậy có thể sẽ giúp mã của bạn dễ đọc và dễ hiểu hơn, và ít có khả năng phá vỡ với các thay đổi sau này.
Emil Lundberg

35

Bạn cũng có thể ước chừng một if / khác chỉ sử dụng Toán tử logic.

(a && b) || c

Trên đây là gần giống như nói:

a ? b : c

Và tất nhiên, gần giống như:

if ( a ) { b } else { c }

Tôi nói đại khái bởi vì có một sự khác biệt với phương pháp này, ở chỗ bạn phải biết rằng giá trị của bý chí sẽ đánh giá là đúng, nếu không bạn sẽ luôn nhận được c. Về cơ bản, bạn phải nhận ra rằng phần sẽ xuất hiện if () { here }bây giờ là một phần của điều kiện mà bạn đặt if ( here ) { }.

Điều trên có thể là do hành vi chuyển / trả về một trong các giá trị ban đầu đã hình thành biểu thức logic, điều này phụ thuộc vào loại toán tử. Một số ngôn ngữ khác, như PHP, mang kết quả thực tế của hoạt động tức là đúng hoặc sai, nghĩa là kết quả luôn luôn đúng hoặc sai; ví dụ:

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

Một lợi ích chính, so với một câu lệnh if bình thường, là hai phương thức đầu tiên có thể hoạt động ở phía bên phải của một đối số tức là như một phần của bài tập.

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

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

Cách duy nhất để đạt được điều này với một câu lệnh if chuẩn sẽ là sao chép phần xác nhận:

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

Bạn có thể hỏi tại sao chỉ sử dụng Toán tử logic thay vì Toán tử Ternary , đối với các trường hợp đơn giản bạn có thể sẽ không, trừ khi bạn muốn chắc chắn abcả hai đều đúng. Bạn cũng có thể đạt được các điều kiện phức tạp hợp lý hơn với các toán tử logic, có thể trở nên khá lộn xộn khi sử dụng các thao tác ternary lồng nhau ... sau đó một lần nữa nếu bạn muốn mã của mình dễ đọc, không thực sự trực quan.


32

Trong tiếng Anh đơn giản, cú pháp giải thích:

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

Có thể được viết như:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

5
Có thể làm điều này mà không cần tuyên bố "khác"? tức làcondition ? true
Người ủng hộ của quỷ

@ScottBeeson Chắc chắn. Nó cũng phụ thuộc vào việc sử dụng điều kiện của bạn. true false""tất cả sẽ ổn để bỏ qua phần khác.
Onimusha

Vậy 2 == 2 ? doSomething()sẽ giống như if (2 == 2) doSomething()thế nào?
Người ủng hộ của quỷ

1
Có, nhưng phần khác không thể được bỏ qua hoàn toàn. Khi cho thuê : falsehoặc : ""nên ở đó vì javascript đang mong đợi điều này.
Onimusha

5
Oh. Vì vậy, không thể làm điều đó mà không có tuyên bố khác.
Biện hộ của quỷ

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

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

48
Tôi thậm chí không biết những gì tôi vừa đọc, nhưng tôi đang cười khá nhiều.
Jazz

20

Nếu bạn chỉ muốn một IF nội tuyến (không có ELSE), bạn có thể sử dụng toán tử AND logic:

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

Nếu bạn cũng cần ELSE, hãy sử dụng thao tác ternary mà người khác đề xuất.


17

Bạn có thể làm như thế này trong JavaScript:

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

8

FYI, bạn có thể soạn các toán tửđiều kiện

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

Nếu logic của bạn đủ phức tạp, thì bạn có thể cân nhắc sử dụng IIFE

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

Tất nhiên, nếu bạn có kế hoạch sử dụng logic này nhiều lần, thì bạn sẽ đóng gói nó trong một chức năng để giữ cho mọi thứ tốt đẹp và KHÔ.


6

Tôi thường cần chạy nhiều mã hơn theo điều kiện, bằng cách sử dụng: ( , , )nhiều phần tử mã có thể thực thi:

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

Để thêm vào điều này, bạn cũng có thể sử dụng nội tuyến nếu có điều kiện với && và || khai thác. Như thế này

var a = 2;
var b = 0;

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

0

Không phải là câu hỏi về cơ bản: tôi có thể viết như sau không?

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

Câu trả lời là, vâng, ở trên sẽ dịch.

tuy nhiên, hãy cảnh giác với những điều sau đây

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

hãy chắc chắn bọc mã mơ hồ trong dấu ngoặc nhọn vì ở trên sẽ đưa ra một ngoại lệ (và các hoán vị tương tự sẽ tạo ra hành vi không mong muốn.)


0

nội tuyến nếu:

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

kết luận trung thực: các tuyên bố được thực hiện khi giả thuyết là đúng

kết luận falsey: tuyên bố thực hiện khi giả thuyết là sai

ví dụ của bạn:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.