这或等于速记

时间:2014-09-19 07:30:47

标签: javascript logic

是否有更优雅的写作方式:

if((this=='condition')||(that=='condition')){break}

我在这里错过了一个逻辑符号吗?

3 个答案:

答案 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;

然后,首先,切换到=== 。双==是一种较慢的算法,必须允许不同的类型,而===可以更快地失败。当所有值都是字符串时,性能是相同的,但当某些值为falsenullundefined时,==要慢得多,{{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;