代码应易于阅读,因此简洁明了不意味着要花多少钱,否则您应该重新发布到https://codegolf.stackexchange.com/-因此,我建议使用第二个局部变量,以index
最大程度地提高阅读的理解度(我还注意到,运行时成本也极低):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
但是,如果您真的想减少这种表达方式,因为您是同事或项目合作者的残酷虐待狂,那么您可以使用以下4种方法:
1:a中的临时变量 var
语句中的
当用逗号分隔时,可以使用var
语句的功能来定义(和分配)第二个临时变量index
:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2:自执行匿名功能
另一种选择是自执行匿名函数:
// Traditional syntax:
var value = function( x ) { return x !== -1 ? x : 0 }( someArray.indexOf(3) );
// ES6 syntax:
var value = ( x => x !== -1 ? x : 0 )( someArray.indexOf(3) );
3:逗号运算符
JavaScript还支持臭名昭著的“逗号运算符”,它也存在于C和C ++中。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comma_Operator
要在需要单个表达式的位置中包含多个表达式时,可以使用逗号运算符。
您可以使用它来引入副作用,在这种情况下,可以通过重新分配给value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
之所以有效,var value
是因为首先对其进行解释(因为这是一条语句),然后才解释最左侧,最内部value
才对赋值进行解释,然后对逗号运算符的右边进行解释,然后对三元运算符进行解释-所有合法的JavaScript。
4:重新分配一个子表达式
评论员@IllusiveBrian指出,如果对的赋值value
用作带括号的子表达式,则不需要使用逗号运算符(在前面的示例中):
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
请注意,在逻辑表达式中使用否定词可能会使人更难遵循-因此,通过将以下所有示例简化为,可以通过将更idx !== -1 ? x : y
改为来阅读idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
不是if/else