在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');
可悲的是,这不起作用。写这个更优雅的方式是什么?
答案 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.
}