在三元运算中返回多个值

时间:2018-05-31 19:47:43

标签: javascript

我不能只是一个例子:

let a = 0;
let b = 2;
let condition;
condition ? a = 2; b = 10 : false
console.log(a, b)

为什么这种语法错了?

6 个答案:

答案 0 :(得分:2)

由于运算符的优先级,三元仅适用于表达式,所以可能会这样做:

condition ? ((a = 2), (b = 10)) : false

但是,我更愿意:

if(condition) {
 a = 2;
 b = 10;
}

答案 1 :(得分:2)

只是提供另一个尚未发布的选项,如果您不想使用标准if..else,您还可以使用ES6's neat destructuring assignment,如果您使用的话,这会非常方便已经有一组你想要分配的值。

例如:(我已经使用两种不同的条件来显示两种结果)



let a = 1 > 2 ? [y, z] = [2, 10] : false;
console.log(a); //a = false;

2 > 1 ? [y, z] = [2, 10] : false;
console.log(y, z); //y = 2, z = 10;




答案 2 :(得分:2)

您需要将赋值包装在括号中,并使用分隔赋值的comma operator而不是分隔语句的分号。

分号在到达:之前结束conditional (ternary) operator ?:,这是语法的必要部分,这会导致错误。

let a = 0;
let b = 2;
let condition = true;

condition ? (a = 2, b = 10) : false;

console.log(a, b);

您可以使用logical AND &&

,而不是使用条件运算符

let a = 0;
let b = 2;
let condition = true;

condition && (a = 2, b = 10);

console.log(a, b);

最后使用if的最佳方法。

let a = 0;
let b = 2;
let condition = true;

if (condition) {
    a = 2;
    b = 10;
}

console.log(a, b);

答案 3 :(得分:0)

在三元操作中,您无法运行超过1“行”或“命令”(以分号结尾)。 你可以做到

public class ComplexModel
{
    [EntityExpression(nameof(ComplexEntity.Id))]
    public Guid Id { get; set; }

    [EntityExpression(nameof(ComplexEntity.Property1), IsComplex = true)]
    public SimpleModel Property1 { get; set; }

    [EntityExpression(nameof(ComplexEntity.Property2), IsComplex = true)]
    public SimpleModel Property2 { get; set; }
}

适用于您的目的,或者您希望稍后更改let condition; let a = condition ? 2: 0; let b = condition ? 10 : 2; console.log(a, b); a

b

这两个示例都可以满足您的需求

答案 4 :(得分:0)

let condition1 = false;
let {a=0,b=2} = condition1 ? {a:2,b:10} : {}
console.log(a, b)

let condition2 = true;
let {c=0,d=2} = condition2 ? {c:2,d:10} : {}
console.log(c, d)

答案 5 :(得分:-1)

我对javascript相对较新,我不确定这里的答案,但不是这样的三元运算符:

condition ? a = 2 : b = 10;

或者在你的情况下:

condition ? (a = 2, b = 10) : false;