Нет, использование назначения в качестве назначения редко является хорошей идеей - код намного легче читать и понимать, когда условия только тестируют условия, а не когда эти условия также имеют побочные эффекты. В этом случае вы можете исправить это, указав 2
и 0
в качестве выражений справа:
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);