2016-08-13 69 views
2

JavaScript是否提供语法糖以将变量同时与一组文字和变量进行比较?针对多个文字或变量测试变量值

这是乏味写if (x !== foo || x !== bar),我想有分拣机版本一样if (<< x !== foo || bar >>)

我知道我可以使用,但我正在寻找的东西内联和更简洁的switch语句

+1

除非'x == foo == bar',这个条件总是如此。你是不是指'(x!== foo && x!== bar)'? – Arnauld

+0

为什么说明显而不是回答这个问题?我想在x不是的情况下返回。这只是一个占位符条件 –

+0

如果'糖'是为了让事情看起来更好,我认为没有更好的办法。如果它的字符数最少,那更多的是codegolf.stackexchange.com问题,所以让游戏开始...... – James

回答

0

你可以这样做这样的:

if ([foo, bar].indexOf(x) === -1) { 
    .... 
} 
0

你可以这样做

![foo,bar].includes(x) && doSomething(); 
+0

对于那些需要支持IE的人来说,如果没有polyfill,这将不起作用:-( – mcgraphix

+1

@mcgraphix是的,对..但在这个问题上有'ecmascript-6'标签,所以我认为这是值得的解决方案。 – Redu

0

你可以在ES6语法创建自己的比较功能,在这里:

function isNot(v, ...a) { 
 
    return a.indexOf(v) == -1; 
 
} 
 

 
var x, foo = 123, bar = 456; 
 

 
x = 456; 
 
console.log(isNot(x, foo, bar)); 
 

 
x = 789; 
 
console.log(isNot(x, foo, bar));

或者你甚至可以创建新的原型方法。例如,对于编号:

Number.prototype.notIn = function(...a) { 
 
    return a.indexOf(this.valueOf()) == -1; 
 
} 
 

 
var x, foo = 123, bar = 456; 
 

 
x = 456; 
 
console.log(x.notIn(foo, bar)); 
 

 
x = 789; 
 
console.log(x.notIn(foo, bar));

NB:您可能需要使用for循环迭代上arguments的浏览器不支持ES6。

+1

如果你使用ES6('Array.from'),你可以使用'function isNot v,... a){' – loganfsmyth

+0

@loganfsmyth - 非常真实!回答相应更新。谢谢! – Arnauld