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中使用单行三元运算符?
任何人都可以说明原因吗?
提前感谢您的大力帮助.
事实上,把?一条新线路放错了; 即使它在实践中没有受到伤害.
原因是一个名为" 自动分号插入 " 的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)
对于所有编码标准,它们通常用于可读性和可维护性.我的猜测是作者发现它在单独的行上更具可读性.您的语言的编译器/解释器将处理它.只要你/你的项目有一套标准并坚持下去,你就没事了.我建议在将这些标准投入石头之前,对标准进行处理或至少由项目中的每个人进行审查.我认为如果你在这样的单独行上分解它,你也可以定义一个if/else条件块并使用它.
警惕没有正当理由的编码标准规则.
就个人而言,我不喜欢三元运算符,因为它对我来说感觉不自然,我总是要读几行才能理解它在做什么.我发现单独的if/else块更容易让我阅读.个人偏好当然.