0

在 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

4 回答 4

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 库应该包含很多这样的列表原型的变体。

于 2009-07-23T21:01:35.677 回答
2
var test = 'd';
if (!/[abc]/.test(test))
  alert('were good to go');
于 2009-07-23T21:26:44.333 回答
1

我同意 Matthew Crumley 的观点,即按原样,这是一个逻辑上无效的问题。为了好玩,我假设您打算在您的问题中使用 && ...

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");
于 2009-07-24T04:20:23.097 回答
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.
}
于 2009-07-23T21:30:18.350 回答