可视化优化串联在一起的JavaScript条件运算符

时间:2009-07-23 20:53:57

标签: javascript conditional-operator

在JavaScript中,我们假设我们有以下代码

var test = 'd';
if (test != 'a' && test != 'b' && test != 'c')
  alert('were good to go');

这个如果对我来说似乎相当冗长。我想写一些像

这样的东西
if (test != ('a' && 'b' && 'c')
  alert('were good to go');

可悲的是,这不起作用。写这个更优雅的方式是什么?

4 个答案:

答案 0 :(得分:2)

你无法做到这一点,但你可以这样接近:

Array.prototype.contains = function(v) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == v) return true;
    }
    return false;
}

if (!['a', 'b', 'c'].contains('d')) {
    alert('good to go');
}

大多数不错的JS库应该包含很多像这样的列表原型的变体。

答案 1 :(得分:2)

var test = 'd';
if (!/[abc]/.test(test))
  alert('were good to go');

答案 2 :(得分:1)

我同意Matthew Crumley的说法,这是一个逻辑上无效的问题,原样。为了好玩,我将假设您打算使用&amp;&amp;在你的问题......

var test = 'd';
({a: 1, b: 1, c: 1}[ test ]) || alert("we're good to go");

或..

var test = 'd';
!(test in {a: 0, b: 0, c: 0}) && alert("we're good to go");

答案 3 :(得分:0)

一个小帮手功能会带你走远......

// If you write this...
function set(){
    obj={}
    for (var i=0; i<arguments.length; i++)
        obj[arguments[i]]=1;  
    return obj
}

// Then you can do this!
if (! test in set('a','b','c')){
    //Do stuff.
}