the*_*dow 59 javascript comparison
什么是将一个值与多个选项进行比较的最漂亮的方法?
我知道有很多方法可以做到这一点,但我正在寻找最好的方法.
我问,因为我希望这是可行的(当你看它时,它显然不是这样):
if (foobar == (foo||bar) ) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
dav*_*vid 93
不要试图过于偷偷摸摸,特别是当它不必要地影响性能时.如果你真的有一大堆比较要做,那就好好格式化.
if (foobar === foo ||
foobar === bar ||
foobar === baz ||
foobar === pew) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
And*_*dez 59
我用来做的是将多个值放在数组中
var options = [foo, bar];
Run Code Online (Sandbox Code Playgroud)
然后,使用indexOf()
if(options.indexOf(foobar) > -1){
//do something
}
Run Code Online (Sandbox Code Playgroud)
为了美好:
if([foo, bar].indexOf(foobar) +1){
//you can't get any more pretty than this :)
}
Run Code Online (Sandbox Code Playgroud)
对于旧浏览器:
(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/IndexOf)
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 18
你可以使用一个开关:
switch (foobar) {
case foo:
case bar:
// do something
}
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 16
由于没有人添加明显的解决方案,但两种比较工作正常,我会提供:
if (foobar === foo || foobar === bar) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
而且,如果你有很多值(可能是数百或数千),那么我建议制作一个Set,因为它使得非常简洁和简单的比较代码,并且它在运行时很快:
// pre-construct the Set
var tSet = new Set(["foo", "bar", "test1", "test2", "test3", ...]);
// test the Set at runtime
if (tSet.has(foobar)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
对于ES6之前的版本,您可以获得一个有很多的Set polyfill.在另一个答案中描述了一个.
luc*_*eer 16
只是为了踢,因为这个Q&A确实似乎是关于语法微观分析,对AndréAlçadaPadez的建议进行了微小的修改:
(当然还包括IE9前垫片/ shiv/polyfill)
if (~[foo, bar].indexOf(foobar)) {
// pretty
}
Run Code Online (Sandbox Code Playgroud)
为什么不使用indexOf像下面这样的数组呢?
if ([foo, bar].indexOf(foobar) !== -1) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
只是普通的Javascript,没有框架或库,但它不适用于IE <9.
| 归档时间: |
|
| 查看次数: |
94671 次 |
| 最近记录: |