我尝试了以下内容,但它抛出异常:
if (!$get('sslot_hf0').value in ('X', 'Y', 'Z', '0')) {
$get('sslot_hf0').value = 'X';
}
我正在寻找与IN
SQL
运算符类似的函数
答案 0 :(得分:3)
您可以使用indexOf
['X', 'Y', 'Z', '0'].indexOf('Z')
> 2
['X', 'Y', 'Z', '0'].indexOf('T')
> -1
if (['X', 'Y', 'Z', '0'].indexOf($get('sslot_hf0').value) !== -1) {
//...
}
答案 1 :(得分:2)
您可以使用以下函数用于相同目的,第二个参数可以是数组或对象,第一个参数是您在数组或对象中搜索的值。
function inStruct(val,structure)
{
for(a in structure)
{
if(structure[a] == val)
{
return true;
}
}
return false;
}
if(inStruct('Z',['A','B','Z']))
{
//do your stuff
}
//此函数也遍历继承的属性
即在某些包含js库的地方
Array.prototype.foo = 10;
比
instruct(10,[1,2,3]) // will return true
对象也会发生同样的情况。检查这个小提琴 http://jsfiddle.net/rQ8AH/17/
EDITED ::
谢谢大家的评论......这是更新的代码,我认为保留旧功能也更好。所以,有人可以注意到差异。
function inStruct(val,structure)
{
for(a in structure)
{
if(structure[a] == val && structure.hasOwnProperty(a))
{
return true;
}
}
return false;
}
答案 2 :(得分:1)
in
在Javascript中的功能不同。您必须使用||
(或OR
)运算符进行多次比较。
答案 3 :(得分:1)
SQL:
something in ('X','Y','Z','0')
现代JavaScript(包括IE> 8):
['X','Y','Z','0'].indexOf(something)>-1
更多现代JavaScript(!IE):
['X','Y','Z','0'].includes(something)
如果您需要传统浏览器(包括IE)的简单includes
polyfill:
if(!Array.prototype.includes) Array.prototype.includes =function(value,start) {
start=parseInt(start)||0;
for(var i=start;i<this.length;i++) if(this[i]==value) return true;
return false;
};
根据AuxTaco的评论,以下是适用于IE> 8的polyfill版本:
if (!Array.prototype.includes) Object.defineProperty(Array.prototype, 'includes', {
value: function(value,start) {
start=parseInt(start)||0;
for(var i=start;i<this.length;i++) if(this[i]==value) return true;
return false;
}
});
答案 4 :(得分:0)
如果您想要有用的设置操作功能并且不介意添加库,请查看underscorejs
否则期望写入for循环来循环遍历值并执行相等性检查。
答案 5 :(得分:0)
答案 6 :(得分:-1)
你可以做到这一点,既好又容易,将值存储在数组中并使用IN
var temparr = ['x', 'y', 'z', '0'];
if (!$get('sslot_hf0').value in temparr) {
$get('sslot_hf0').value = 'X';
}
希望这会有所帮助