一尘不染

JavaScript根据值列表检查变量相等性

javascript

我正在检查一个变量,例如foo,是否等于多个值。例如,

if( foo == 1 || foo == 3 || foo == 12 ) {
    // ...
}

关键是,对于这样一个琐碎的任务,这是很多代码。我想出了以下几点:

if( foo in {1: 1, 3: 1, 12: 1} ) {
    // ...
}

但这也不完全吸引我,因为我必须给对象中的项目赋予冗余值。

有谁知道对多个值进行相等性检查的体面方法?


阅读 300

收藏
2020-04-25

共1个答案

一尘不染

使用提供的答案,我得出以下结论:

Object.prototype.in = function() {
    for(var i=0; i<arguments.length; i++)
       if(arguments[i] == this) return true;
    return false;
}

可以这样称呼:

if(foo.in(1, 3, 12)) {
    // ...
}

编辑: 最近我碰到了这个“技巧”,如果值是字符串并且不包含特殊字符,则很有用。对于特殊字符,由于转义而变得丑陋,并且因此也更容易出错。

/foo|bar|something/.test(str);

更精确地说,这将检查确切的字符串,但是对于简单的相等性测试而言,它再次变得更加复杂:

/^(foo|bar|something)$/.test(str);
2020-04-25