是否有更优雅的写作方式:
if((this=='condition')||(that=='condition')){break}
我在这里错过了一个逻辑符号吗?
答案 0 :(得分:1)
不幸的是,你所要求的并不比你写的更简单。但是,如果你必须将它与800万个值进行比较,那么这将成为一个苦差事'condition'
。因此,我提出以下建议:
if ( ['this', 'that', 'there'].indexOf('condition') != -1 ) break;
此外,如果您想要更多控制权,可以使用some
if ( ['this', 'that', ...].some(function(arg) {
return arg == 'condition';
}) ) {
break;
}
这样,您可以获取一千个元素的数组,并将它们与some
方法进行比较。
另一种方法是编写一个联合函数:
function union() {
for ( var i=0; i<arguments.length-1; i++ ) {
if ( arguments[i] === arguments[arguments.length-1] ) return true;
}
return false;
}
然后像这样使用它:
if ( union(this, that, etc..., comparator) ) { break; }
答案 1 :(得分:1)
从问题中你想做什么并不完全清楚,但如果你想这样做:
if( a == 'qwerty' || b == 'qwerty' ) break;
然后,首先,切换到===
。双==
是一种较慢的算法,必须允许不同的类型,而===
可以更快地失败。当所有值都是字符串时,性能是相同的,但当某些值为false
或null
或undefined
时,==
要慢得多,{{3 }}。它(更重要的是)它会让你暴露出令人讨厌的错误:"" == false
提供true
,但"" == null
提供false
。最后,===
对解释器和任何读取代码的人都是明确的,你希望匹配类型在这里。
另一方面,如果你试图这样做:
if( a == 'someValue' || a == 'someOtherValue' ) break;
然后,对于大量不变的值,可以更快地创建字典/对象并查找其中的内容。例如,当您对一组1000个值进行匹配时,它比使用显式比较快45倍,或者将indexOf与列表匹配为this jsperf shows。
答案 2 :(得分:0)
删除一些括号:
if (this=='condition'||that=='condition') break;