我不能只是一个例子:
let a = 0;
let b = 2;
let condition;
condition ? a = 2; b = 10 : false
console.log(a, b)
为什么这种语法错了?
答案 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;