Làm cách nào tôi có thể sử dụng một if
câ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
}
Làm cách nào tôi có thể sử dụng một if
câ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
}
Câu trả lời:
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 c
biến sẽ là minor
nếu giá trị là true
, và major
nế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
if (a < b) c = 'major';
Để viết if
câ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;
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";
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ù.
if
câ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.
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 a
và b
cả 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.
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;
condition ? true
true
false
và ""
tất cả sẽ ổn để bỏ qua phần khác.
2 == 2 ? doSomething()
sẽ giống như if (2 == 2) doSomething()
thế nào?
: false
hoặc : ""
nên ở đó vì javascript đang mong đợi điều này.
FYI, bạn có thể soạn các toán tử có đ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Ô.
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.)