类似这样:
if (mystring == "a" || mystring == "b" || mystring =="c")
我本来想要做的是:
if (mystring in ("a", "b", "c"))
有可能吗?
类似这样:
if (mystring == "a" || mystring == "b" || mystring =="c")
我本来想要做的是:
if (mystring in ("a", "b", "c"))
有可能吗?
indexOf()
。if ( [ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }
编辑 随着ES7的到来,有了一些简化。截至今日,只有Chrome 47+和FF 43+支持它:
if ( [ 'a', 'b', 'c' ].includes( mystring ) ) { ... }
使用indexOf是首先想到的方法,但是你需要记住,在旧版本的IE中没有.indexOf函数(所以你需要使用自定义代码来模拟它,或者直接使用像jQuery.inArray或underscore.js indexOf这样的工具)。
if ([ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }
顺便提一句:通过查看 jQuery 源代码中的 inArray 定义,可以看出编写自己的 indexOf 替代方法非常容易。所以像我之前说的那样 - 编写您自己的方法,从其他库中复制粘贴它,或者如果您想要在所有浏览器中使用 indexOf,则只需使用这些库。
a = "a";
b = ["a","b","c","d"];
function check(a,b){
i = 0;
for (i=0;i<b.length;i++) {
if (a === b[i]) {
return true;
}
}
return false;
}
alert(check (a,b))
indexOf
。[1,2,3].indexOf(1) will give 0
[1,2,3].indexOf(4) will give -1
所以,您可以检查indexOf是否返回-1。
对于字符串也是类似的。
if (["a", "b", "c"].indexOf(mystring) != -1) {
// do something
}
if (["a", "b", "c"].indexOf(mystring) != -1) {}
这可能是最好的方法,但在某些浏览器上可能无法正常工作。
String.prototype.in = function(){
return ~[].slice.call(arguments).indexOf(this.valueOf()) ? true : false;
}
//usage
var myStr = 'a';
myStr.in('a','b','c'); //=> true
'd'.in('a','b','c'); //=> false
对于旧版浏览器:MDN页面 包含了一个 Array.indexOf
的 shim。
你的版本是三个字符中最快的,也是最易读的。
如果有更多可能的值,你可以使用类似这样的代码:
var c;
if (s.length==1 && (c=s.charAt(0))>='a' && c<='c') {
但那主要是为了好玩...
类似于
foreach (str in strings) {
if (mystring.contains(str)) {
...
}
}
可能能够工作。