Як написати вбудований оператор IF у JavaScript?


286

Як я можу використовувати вбудований ifоператор у JavaScript? Чи є вбудована elseзаява?

Щось на зразок цього:

var a = 2;
var b = 3;

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

12
Де тут jQuery? І я все одно не розумію питання.
Марк

Частина jquery може бути подібною до цього $ (document) .ready (function () {var a = 2; var b = 3; if (a <b) {// робити щось}});
takeItEasy

це питання нокаутів також
Мартін Каподічі

1
Це також кутові 1 і 2 і всі інші рамки js (включаючи vanilla.js), тут виникає питання
Бен Таліадорос

Відповіді:


641

Вам не обов'язково потрібен jQuery. Сам JavaScript зробить це.

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

cМінлива буде , minorякщо значення true, і majorякщо значення false.


Це відомо як Умовний (потрійний) Оператор.

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


59
Він ілюструє, як використовувати Inline IF, який відповідає на питання ТОЧНО.
MattW

26
Зауважимо, що всі паролі в цьому випадку необов’язкові. Часто особисті переваги / стиль кодування диктують, коли вони використовуються.
Буде Кляйн

3
@khany, це питання JavaScript. Вираз може оцінюватися в інших мовах по-різному.
Will Klein

1
@MattW Це не показує, як використовувати Inline IF, він показує, як використовувати IF ELSE
Finlay Percy

1
@getName не дуже, але ви можете використовувати один рядок, якщо заява, якщо хочетеif (a < b) c = 'major';
MattW

44

Для написання ifоператора inline, код всередині нього повинен бути лише одним твердженням:

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, Дякую за поради.
Махмуд Гамаль

@ jfriend00 Я б радив проти цього майже у всіх випадках. Якщо ви не використовуєте значення виразу, то вам дуже потрібні побічні ефекти; і побічні ефекти - це те, що твердження чудово підходить. Використання простого старого нудного ifвисловлювання в такому випадку, ймовірно, полегшить ваш код набагато простішим для читання та розуміння, і меншою ймовірністю порушиться з пізнішими змінами.
Еміль Лундберг

35

Ви також можете наблизити if / else, використовуючи лише Логічні Оператори.

(a && b) || c

Сказане приблизно те саме, що сказати:

a ? b : c

І звичайно, приблизно те саме, що:

if ( a ) { b } else { c }

Я кажу приблизно тому, що є одна різниця в цьому підході, в тому, що ви повинні знати, що значення bоцінюється як істинне, інакше ви завжди отримаєте c. В основному ви повинні усвідомити, що частина, яка з'явиться if () { here }, тепер є частиною умови, яку ви ставите if ( here ) { }.

Вищезазначене можливо завдяки поведінці JavaScripts при передачі / поверненні одного з вихідних значень, що формують логічний вираз, який залежить від типу оператора. Деякі інші мови, наприклад 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 }

Ви можете запитати, чому використовувати лише логічних операторів замість термінального оператора , для простих випадків ви, мабуть, цього не зробили, якщо тільки ви не хотіли переконатися, aі вони bбули правдивими. Ви також можете домогтися більш спрощених складних умов з логічними операторами, які можуть стати досить безладним за допомогою вкладених потрійних операцій ... потім знову, якщо ви хочете, щоб ваш код був легко читабельним, і насправді це не інтуїтивно зрозуміло.


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"? тобтоcondition ? true
Адвокат диявола

@ScottBeeson Звичайно. Це також залежить від вашого використання умови. true falseі ""все має бути добре, щоб ігнорувати іншу частину.
Онімуша

Так 2 == 2 ? doSomething()би було те саме, що if (2 == 2) doSomething()?
Адвокат диявола

1
Так, але іншу частину неможливо повністю опустити. В оренді : falseабо : ""має бути там, оскільки javascript цього очікує.
Онімуша

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), ви можете використовувати логічний оператор AND:

(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

Щоб додати до цього, ви також можете використовувати inline, якщо умова && та || операторів. Подобається це

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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.