Может кто-нибудь объяснить, пожалуйста, простыми словами, что такое ?:
(условный, «троичный») оператор и как его использовать?
?:
(как вы его написали, без оператора между ними) - оператор Элвиса . Довольно умно.
Может кто-нибудь объяснить, пожалуйста, простыми словами, что такое ?:
(условный, «троичный») оператор и как его использовать?
?:
(как вы его написали, без оператора между ними) - оператор Элвиса . Довольно умно.
Ответы:
Это сокращение в одну строку для оператора if-else. Это называется условный оператор. 1
Вот пример кода, который можно сократить с помощью условного оператора:
var userType;
if (userIsYoungerThan18) {
userType = "Minor";
} else {
userType = "Adult";
}
if (userIsYoungerThan21) {
serveDrink("Grape Juice");
} else {
serveDrink("Wine");
}
Это может быть сокращено ?:
следующим образом:
var userType = userIsYoungerThan18 ? "Minor" : "Adult";
serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");
Как и все выражения, условный оператор также можно использовать как самостоятельный оператор с побочными эффектами, хотя это необычно вне минимизации:
userIsYoungerThan21 ? serveGrapeJuice() : serveWine();
Они могут даже быть прикованы цепью:
serveDrink(userIsYoungerThan4 ? 'Milk' : userIsYoungerThan21 ? 'Grape Juice' : 'Wine');
Будьте осторожны, иначе у вас получится замысловатый код, подобный этому:
var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;
1 Часто называемый «тройной оператор» , но на самом деле это просто троичный оператор [оператор принимающий три операнда]. Это единственный JavaScript, который есть на данный момент.
ternary
это тип оператора (т.е. он состоит из 3 частей). Имя этого конкретного троичного оператора - conditional operator
. Просто случается, что в JS только один троичный оператор, поэтому термины используются неправильно.
||
оператора, так как он замыкает накоротко, если значение слева верно.
Я хочу добавить некоторые из приведенных ответов.
В случае, если вы встретите (или захотите использовать) троицу в такой ситуации, как «отобразить переменную, если она установлена, иначе ...», вы можете сделать ее еще короче, без троицы .
Вместо:
var welcomeMessage = 'Hello ' + (username ? username : 'guest');
Ты можешь использовать:
var welcomeMessage = 'Hello ' + (username || 'guest');
Это эквивалент Javascripts для краткого оператора PHP ?:
Или даже:
var welcomeMessage = 'Hello ' + (username || something || maybethis || 'guest');
Он оценивает переменную, и если она ложная или не установлена, она переходит к следующей.
'Hello ' + (username ? username : 'guest')
, Hello +
если игнорируется и возвращается только результат троичной операции. Кто-нибудь может объяснить, почему?
'Hello ' + username
что всегда true
, потому что это строка с длиной больше 0.
Это называется «троичный» или «условный» оператор.
пример
Оператор?: Можно использовать как ярлык для оператора if ... else. Обычно он используется как часть большего выражения, где оператор if ... else будет неудобным. Например:
var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");
В примере создается строка, содержащая «Добрый вечер». если это после 6 вечера. Эквивалентный код, использующий оператор if ... else, будет выглядеть следующим образом:
var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
greeting += " evening.";
else
greeting += " day.";
Из документации MSDN JS .
По сути это условное заявление.
Также см:
Гуглить немного сложно, когда все, что у вас есть, это символы;) Используемые термины "условный оператор javascript".
Если вы видите более забавные символы в Javascript, вам следует сначала поискать операторы Javascript: список операторов MDC . Единственное исключение, с которым вы можете столкнуться, это $
символ .
Чтобы ответить на ваш вопрос, условные операторы заменяют простые операторы if. Пример лучше всего:
var insurancePremium = age > 21 ? 100 : 200;
Вместо:
var insurancePremium;
if (age > 21) {
insurancePremium = 100;
} else {
insurancePremium = 200;
}
var olderThan20 = age > 20;
вместо этого.
z = (x == y ? 1 : 2);
эквивалентно
if (x == y)
z = 1;
else
z = 2;
кроме, конечно, это короче.
Большинство ответов верны, но я хочу добавить немного больше. Троичный оператор является правоассоциативным, что означает , что он может быть прикован следующим образом if … else-if … else-if … else
:
function example() {
return condition1 ? value1
: condition2 ? value2
: condition3 ? value3
: value4;
}
Эквивалентно:
function example() {
if (condition1) { return value1; }
else if (condition2) { return value2; }
else if (condition3) { return value3; }
else { return value4; }
}
Более подробная информация здесь
Это называется троичный оператор
tmp = (foo==1 ? true : false);
Троичный оператор
Обычно у нас есть условные заявления в Javascript.
Пример:
if (true) {
console.log(1)
}
else {
console.log(0)
}
# Answer
# 1
но он содержит две или более строки и не может быть назначен переменной. У Javascript есть решение этой проблемы. Тернарный оператор . Тернарный оператор может писать в одну строку и назначать переменную.
Пример:
var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1
Этот троичный оператор похож на язык программирования Си.
Эй, приятель, просто помни js works, оценивая либо true, либо false, верно?
давайте возьмем троичный оператор:
questionAnswered ? "Awesome!" : "damn" ;
Во-первых, js проверяет, является ли questionAnspted true
или false
.
if true
( ?
) вы получите "Awesome!"
иначе ( :
) вы получите "черт";
Надеюсь, это поможет другу :)
Это if statement
все на одной линии.
Так
var x=1;
(x == 1) ? y="true" : y="false";
alert(y);
Выражение для оценки находится в ( )
Если оно соответствует true, выполните код после ?
Если он соответствует ложному, выполните код после :
x = 9
y = 8
унарный
++x
--x
двоичный
z = x + y
троичный
2>3 ? true : false;
2<3 ? true : false;
2<3 ? "2 is lesser than 3" : "2 is greater than 3";
Это называется ternary operator
. Для получения дополнительной информации, вот еще один вопрос, на который я ответил по этому поводу:
conditional operator
. Просто случается, что в JS только один троичный оператор, поэтому термины используются неправильно.
Вероятно, это не самый элегантный способ сделать это. Но для тех, кто не знаком с троичными операторами, это может оказаться полезным. Мое личное предпочтение состоит в том, чтобы сделать запасные варианты с 1 линией вместо блоков условий.
// var firstName = 'John'; // Undefined
var lastName = 'Doe';
// if lastName or firstName is undefined, false, null or empty => fallback to empty string
lastName = lastName || '';
firstName = firstName || '';
var displayName = '';
// if lastName (or firstName) is undefined, false, null or empty
// displayName equals 'John' OR 'Doe'
// if lastName and firstName are not empty
// a space is inserted between the names
displayName = (!lastName || !firstName) ? firstName + lastName : firstName + ' ' + lastName;
// if display name is undefined, false, null or empty => fallback to 'Unnamed'
displayName = displayName || 'Unnamed';
console.log(displayName);
Мы можем использовать с Jquery, а также длину, как показано ниже:
Предположим, у нас есть текстовое поле GuarantorName, которое имеет значение и хочет получить имя и фамилию - оно может быть нулевым. Так что, чем
var gnamesplit = $("#txtGuarantorName").val().split(" ");
var gLastName = "";
var gFirstName = "";
if(gnamesplit.length > 0 ){
gLastName = gnamesplit[0];
}
if(gnamesplit.length > 1 ){
gFirstName = gnamesplit[1];
}
Мы можем использовать приведенный ниже код с Jquery с минимальным кодом
var gnamesplit = $("#txtGuarantorName").val().split(" ");
var gLastName = gnamesplit.length > 0 ? gnamesplit[0] : "";
var gFirstName = gnamesplit.length > 1 ? gnamesplit[1] : "";
$("#txtLastName").val(gLastName);
$("#txtFirstName").val(gFirstName);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div >
Guarantor Name: <input type="text" id="txtGuarantorName" value="ASP.NET Core" /><br/>
<br/>
<br/>
First Name: <input type="text" id="txtLastName" value="ASP.NET Core" />
Last Name: <input type="text" id="txtFirstName" value="ASP.NET Core" />
</div>
Тернарные выражения очень полезны в JS, особенно в React. Вот упрощенный ответ на многие хорошие, подробные из них.
condition ? expressionIfTrue : expressionIfFalse
Думайте о expressionIfTrue
том, что OG if делает заявление истинным;
думать expressionIfFalse
как о другом утверждении.
Пример:
var x = 1;
(x == 1) ? y=x : y=z;
это проверило значение x, первое y = (значение) вернулось, если true, второе возвращение после двоеточия: вернул y = (значение), если false.
Условный (троичный) оператор - единственный оператор JavaScript, который принимает три операнда. Этот оператор часто используется как ярлык для оператора if.
condition ? expr1 : expr2
Если условие истинно, оператор возвращает значение expr1; в противном случае возвращает значение expr2.
function fact(n) {
if (n > 1) {
return n * fact(n-1);
} else {
return 1;
}
// we can replace the above code in a single line of code as below
//return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));
Для получения дополнительной информации, пожалуйста, прочитайте ссылку на документ MDN.
Если у вас есть одно условие, проверьте функцию экземпляра в JavaScript . это простой в использовании троичный оператор . для реализации которого потребуется всего одна строка . Пример:
private module : string ='';
private page:boolean = false;
async mounted(){
if(this.module=== 'Main')
{
this.page = true;}
else{
this.page = false;
}
}
такую функцию с одним условием можно записать следующим образом.
this.page = this.module=== 'Main' ?true:false;
состояние ? если True: если False
(sunday == 'True') ? sun="<span class='label label-success'>S</span>" : sun="<span class='label label-danger'>S</span>";
sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
sunday ?
.it должно бытьsun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"