Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阅读此JavaScript代码?(var1?var2:var3)_Javascript_Operators - Fatal编程技术网

如何阅读此JavaScript代码?(var1?var2:var3)

如何阅读此JavaScript代码?(var1?var2:var3),javascript,operators,Javascript,Operators,我在代码中见过这种格式,但找不到一个好的源代码来解释它的含义 编辑以进行后续操作: 谢谢你的快速回答!我想是这样的。现在,关于奖励积分: 你能用吗 (var1?var2) 做与…相同的事 if (var1) { var2 } 它是一个条件运算符 是的 如果为var1,则为var2,否则为var3 在这里阅读更多 条件运算符是唯一的 JavaScript运算符,它需要三个 操作数。该操作员经常被忽略 用作if的快捷方式 声明 这似乎是一种三元运算。也就是说,if

我在代码中见过这种格式,但找不到一个好的源代码来解释它的含义

编辑以进行后续操作:

谢谢你的快速回答!我想是这样的。现在,关于奖励积分:

你能用吗 (var1?var2)

做与…相同的事

    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;