在 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');
可悲的是,这不起作用。有什么更优雅的方式来写这个?
在 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');
可悲的是,这不起作用。有什么更优雅的方式来写这个?
你不能这样做,但你可以像这样接近:
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 库应该包含很多这样的列表原型的变体。
var test = 'd';
if (!/[abc]/.test(test))
alert('were good to go');
我同意 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");
一个小助手功能将带您走得更远...
// 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.
}