如何阅读此JavaScript代码?(var1?var2:var3)
我在代码中见过这种格式,但找不到一个好的源代码来解释它的含义 编辑以进行后续操作: 谢谢你的快速回答!我想是这样的。现在,关于奖励积分: 你能用吗 (var1?var2) 做与…相同的事如何阅读此JavaScript代码?(var1?var2:var3),javascript,operators,Javascript,Operators,我在代码中见过这种格式,但找不到一个好的源代码来解释它的含义 编辑以进行后续操作: 谢谢你的快速回答!我想是这样的。现在,关于奖励积分: 你能用吗 (var1?var2) 做与…相同的事 if (var1) { var2 } 它是一个条件运算符 是的 如果为var1,则为var2,否则为var3 在这里阅读更多 条件运算符是唯一的 JavaScript运算符,它需要三个 操作数。该操作员经常被忽略 用作if的快捷方式 声明 这似乎是一种三元运算。也就是说,if
if (var1) {
var2
}
它是一个条件运算符 是的 如果为var1,则为var2,否则为var3 在这里阅读更多 条件运算符是唯一的 JavaScript运算符,它需要三个 操作数。该操作员经常被忽略 用作if的快捷方式 声明
这似乎是一种三元运算。也就是说,if-else操作的缩写形式。检查详细信息…表达式
var1?var2:var3
返回var2
的值,如果认为var1
的值等于true
,则返回var3
的值
注意,这与以下情况不完全相同:-
if (var1)
varX = var2
else
varX = var3
因为上述构造本身不能作为更大表达式的一部分出现
在ternery表达式中,如?:已知,应该避免让组件表达式产生副作用,而不是++或--运算符的副作用。例如,这不是一个好主意:-
varX = var1 ? doSomethingSignificant() : doSomethingElseSignificant();
在这种情况下,最好使用if-else
构造。另一方面:-
varX = var1 ? calcSomething(var2) : someOtherCalc(var2);
假设被调用的函数本身不会显著修改程序状态,这是可以接受的
编辑:
我想我需要重新强调这一点。不要使用三元运算符作为缩短if
语句的方法。两者的目的不同。如果您的代码中充满了?:代码>应该是,否则将很难阅读。我们期望逻辑流出现在if
语句中。我们希望?:代码>当表达式有一个简单的逻辑组件时。注:表达式不会修改内容,只有赋值后的结果才会修改内容。它被称为(因为它有三个操作数)有条件的(因为它是if/else/then)运算符
它被计算为一个值,因此您通常会使用它来指定一个值,例如:
var result = condition ? value1 : value2;
这相当于:
var result;
if (condition == true) {
result = value1;
} else {
result = value2;
}
例如:
var message = "Length is " + len + " " + (len==1 ? "foot" : "feet");
注意?:
是完全运算符。它不是?
和:
运算符,因此?
本身在Javascript中没有意义。作为第一个问题的补充,您可以使用
var result = (condition) && var1 || var2;
并得到同样的结果
对于第二个问题,在C中也有以下工作:
(condition) && someinstruction;
但这在javascript中似乎不起作用(至少在我的firefox版本中是如此)。我认为你的第一个==是一个输入错误。而且这两位代码并不相等,因为第二位代码前面应该加上“var result;”@lipperless——显然我不应该被允许在早上7:30之前编写代码。昨天我犯了同样的错误。谢谢你指出这些。在你喝完第一杯咖啡之前,千万不要编程。:)不,你不能。您还必须指定else条件。关于您的编辑,最接近的条件是:if(var1)stmt代码>在一行上。var1?var2():void(0)@萨尔曼一世为了可读性会避免这样的结构。我想也许我会睡一觉,醒来后和女儿一起看《芝麻街》。您提醒我,堆栈溢出更为重要。我道歉并向你保证我为自己感到羞耻。这真是走错了路。您不希望值表达式修改任何内容,只希望整个表达式的值为真值或假值,这就是此运算符的用途。@phoenix可能您的示例没有确切显示条件运算符的有用用法。它可以简化为var xCon=num==1代码>变量值=数值<5?'小于5’:‘5或更大’;我认为说明最后一部分的一种更简单的方式是:三元运算符的任务是根据一个条件等于一个值或另一个值,而如果Javascript中的语句根本不产生任何值,则它们的任务是执行代码。@Chuck:这更简单,但表达式没有理由不在三元运算符中执行代码,重要的是代码做了什么(或者更重要的是没有做什么)。理想情况下,程序状态不应因正在求值的表达式而改变。是的,它应该工作<代码>(条件)和指令(&S)仅当条件
为真实值时,code>才应评估某些指令
。
(condition) && someinstruction;