不应在Node.js中的单行上使用三元运算符.为什么?

Amo*_*rni 3 standards coding-style node.js

请考虑以下示例代码:

1.Sample

var IsAdminUser = (User.Privileges == AdminPrivileges)
  ? 'yes'
  : 'no';
console.log(IsAdminUser);
Run Code Online (Sandbox Code Playgroud)

2.Sample

var IsAdminUser = (User.Privileges == AdminPrivileges)?'yes': 'no';
console.log(IsAdminUser);
Run Code Online (Sandbox Code Playgroud)

第二个样本我非常满意并且我以这种方式编码,但是在没有任何支持性原因的情况下,它被告知错误的做法.

为什么建议不在Node.js中使用单行三元运算符?

任何人都可以说明原因吗?

提前感谢您的大力帮助.

lxg*_*lxg 6

事实上,把?一条新线路放错了; 即使它在实践中没有受到伤害.

原因是一个名为" 自动分号插入 " 的JS功能.当一个var语句以换行符结尾时(没有尾随逗号,这表示要遵循更多声明),你的JS解释器应该自动插入一个分号.

这个分号的效果IsAdminUser是赋予布尔值(即结果User.Privileges == AdminPrivileges).之后,新的(无效)表达式将以您认为是三元运算符的问号开始.

如上所述,大多数JS解释器都足够聪明,可以认识到你有一个新行,你不应该有一个换行符,并且隐含地修复你的三元运算符.而且,在缩小脚本时,无论如何都会删除换行符.

所以,在实践中没有问题,但你依赖于常见JS引擎的隐式修复.最好像这样编写三元运算符:

var foo = bar ? "yes" : "no";
Run Code Online (Sandbox Code Playgroud)

或者,对于更大的表达式:

var foo = bar ?
    "The operation was successful" : "The operation has failed.";
Run Code Online (Sandbox Code Playgroud)

甚至:

var foo = bar ?
    "Congratulations, the operation was a total success!" :
    "Oh, no! The operation has horribly failed!";
Run Code Online (Sandbox Code Playgroud)

  • 分号插入不能那样工作。它不是无效的表达式,而是当遇到无效的表达式时,它会根据定义好的规则通过插入分号来修复它。 (2认同)

Ste*_*bbi 5

对于所有编码标准,它们通常用于可读性和可维护性.我的猜测是作者发现它在单独的行上更具可读性.您的语言的编译器/解释器将处理它.只要你/你的项目有一套标准并坚持下去,你就没事了.我建议在将这些标准投入石头之前,对标准进行处理或至少由项目中的每个人进行审查.我认为如果你在这样的单独行上分解它,你也可以定义一个if/else条件块并使用它.

警惕没有正当理由的编码标准规则.

就个人而言,我不喜欢三元运算符,因为它对我来说感觉不自然,我总是要读几行才能理解它在做什么.我发现单独的if/else块更容易让我阅读.个人偏好当然.