三元运算符内的赋值,反模式?

Akl*_*kli 1 javascript coding-style ternary-operator

我有一位同事以这种方式使用三元运算符(在javascript中):

var genderLabel = '';
isMale? genderLabel  = 'Man' : genderLabel  = 'Woman';
Run Code Online (Sandbox Code Playgroud)

在 C# 中,我就这样做。

var genderLabel = isMale? "Man" : "Woman";
Run Code Online (Sandbox Code Playgroud)

我的同事说这是 javascript 编码约定...是真的吗?我不是 javascript 专家,我不喜欢这种语言......当我检查代码时,我专注于我的左手边以遵循变量初始化或赋值,这种风格迫使我阅读整行。

我还在维护一位前雇员的Java代码,他以同样的方式使用三元运算符。这是一种反模式吗?我认为编译器应该禁止它,就像在 if 语句中禁止它一样:

if(x = 2)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

这不会在 C# 中编译。

Der*_*會功夫 5

我的同事说这是 javascript 编码约定...是真的吗?

不。

这是一种反模式吗?

通常一行本身就是一个语句,但是这

isMale ? genderLabel = 'Man' : genderLabel = 'Woman';
Run Code Online (Sandbox Code Playgroud)

是一个表达式,具有设置 的值的副作用genderLabel。这是一个好的做法吗?我不知道,但是如果您认为这是一个很好的做法,那么您还必须允许这样做:

var a = 1, b = 2;
b = [a][a = b, 0];    # swap a and b
Run Code Online (Sandbox Code Playgroud)

你的同事不妨这样做:

if(isMale) genderLabel = 'Man';
else       genderLabel = 'Woman';
Run Code Online (Sandbox Code Playgroud)

这更清楚了。