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

Javascript 三元运算符中的赋值,反模式?,javascript,coding-style,ternary-operator,Javascript,Coding Style,Ternary Operator,我有一位同事以这种方式使用三元运算符(在javascript中): 在C#中,我会这么做 var genderLabel = isMale? "Man" : "Woman"; 我的同事说这是一个javascript编码约定。。。这是真的吗?我不是javascript专家,我不喜欢那种语言。。。当我查看代码时,我会关注左手边的变量初始化或赋值,这种风格迫使我阅读整行代码 我还维护一个前雇员的Java代码,他用同样的方式使用三元运算符。这是反模式吗?我认为编译器应该禁止它,就像在if语句中禁止它一

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

在C#中,我会这么做

var genderLabel = isMale? "Man" : "Woman";
我的同事说这是一个javascript编码约定。。。这是真的吗?我不是javascript专家,我不喜欢那种语言。。。当我查看代码时,我会关注左手边的变量初始化或赋值,这种风格迫使我阅读整行代码

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

if(x = 2)
{
   ...
}
这不会在C#中编译

我的同事说这是一个javascript编码约定。。。这是真的吗

没有

这是反模式吗

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

isMale ? genderLabel = 'Man' : genderLabel = 'Woman';
是一个表达式,其副作用是设置
genderLabel
的值。这是个好习惯吗?我不知道,但是如果你认为这是一个好的做法,那么你也必须允许:

var a = 1, b = 2;
b = [a][a = b, 0];    # swap a and b
您的同事不妨这样做:

if(isMale) genderLabel = 'Man';
else       genderLabel = 'Woman';

这一点要清楚得多。

我以前从未见过这种情况。不仅是一个大的“不”字,因为它从重复中占据了更多的空间,而且它杂乱无章,语义怪异。
if(isMale) genderLabel = 'Man';
else       genderLabel = 'Woman';