有人可以用简单的词向我解释什么是?:
(有条件的“三元”)运算符,以及如何使用它?
有人可以用简单的词向我解释什么是?:
(有条件的“三元”)运算符,以及如何使用它?
Answers:
这是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中恰好只有一个三元运算符,因此这些术语被滥用。
||
操作的典型方法是使用运算符,因为如果左侧的值是true,则会短路。
我想添加一些给定的答案。
如果在“显示已设置变量的情况下,否则...”的情况下遇到(或想要使用)三元,则可以使其更短,而无需三元。
代替:
var welcomeMessage = 'Hello ' + (username ? username : 'guest');
您可以使用:
var welcomeMessage = 'Hello ' + (username || 'guest');
这与PHP的速记三元运算符相当 ?:
甚至:
var welcomeMessage = 'Hello ' + (username || something || maybethis || 'guest');
它对变量求值,如果它是false或未设置,它将继续到下一个。
'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文档。
基本上,这是一个简写的条件语句。
另请参阅:
当您所有的都是符号时,用Google搜索会有点困难;)要使用的术语是“ 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);
这是if statement
一条线上的全部。
所以
var x=1;
(x == 1) ? y="true" : y="false";
alert(y);
要评估的表达式在 ( )
如果匹配,则在 ?
如果匹配为false,请在 :
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以及length,如下例所示:
假设我们有一个具有值的GuarantorName文本框,并且想要获取名字和姓氏-它可能为null。所以比
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>
条件(三元)运算符是唯一采用三个操作数的JavaScript运算符。该运算符通常用作if语句的快捷方式。
condition ? expr1 : expr2
如果条件为true,则运算符返回expr1的值;否则,返回0。否则,它返回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;
健康)状况 ?如果为真:如果为假
(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 ?
它应该是sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"