在条件运算符中分配值

时间:2019-05-09 05:55:43

标签: javascript conditional-operator

将条件赋值给条件运算符内部的变量是一种好习惯吗?这是关于条件/车床操作员,而不是if语句

 a===1 ? (b=2) : (b=0)

使用这种方法时,我会收到棉绒警告。

1 个答案:

答案 0 :(得分:3)

不,使用赋值作为赋值很少是一个好主意-当条件仅是 test 条件时,而不是在条件还具有副作用的情况下,代码更易于阅读和理解。在这种情况下,您可以修复它,将20放在右边的表达式中:

const b = a === 1 ? 2 : 0;

我唯一认为条件内的赋值可能比选择更干净的是手动遍历全局正则表达式以提取匹配的组时(这不是使用条件运算符,但原理相似):

const regex = /\w(?=(\w))/g;
const str = 'foo';

let match;
while (match = regex.exec(str)) {
  console.log(match[1]);
}

未在while条件内分配的替代方案是:

// Requires while(true):
const regex = /\w(?=(\w))/g;
const str = 'foo';

while (true) {
  const match = regex.exec(str);
  if (!match) {
    break;
  }
  console.log(match[1]);
}

// A bit WET:
const regex = /\w(?=(\w))/g;
const str = 'foo';

let match = regex.exec(str);
while (match) {
  console.log(match[1]);
  match = regex.exec(str);
}

但这可能是基于观点的。

请注意,(ab)使用条件运算符代替if/else缩小代码中很常见,但这很好,因为缩小代码并不意味着读取,仅解析。这也是代码高尔夫中的有效技术。

如果要在一个条件中分配多个变量,可以使用解构:

const a = 689;
const [b, c] = a === 1 ? [2, 1] : [0, 3];
console.log(c);

或者,如果变量之间密切相关,这听起来似乎很合理,那么最好使用一个对象(或数组)而不是多个独立变量:

const a = 689;
const obj = a === 1 ? { b: 2, c: 1 } : { b: 0, c: 3 };
console.log(obj);