我尝试了以下方法,但它引发了异常:
if (!$get('sslot_hf0').value in ('X', 'Y', 'Z', '0')) {
$get('sslot_hf0').value = 'X';
}
我正在寻找类似于IN
运算符的功能SQL
我尝试了以下方法,但它引发了异常:
if (!$get('sslot_hf0').value in ('X', 'Y', 'Z', '0')) {
$get('sslot_hf0').value = 'X';
}
我正在寻找类似于IN
运算符的功能SQL
您可以使用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) {
//...
}
您可以将以下函数用于相同目的,第二个参数可以是数组或对象,第一个参数是您在数组或对象中搜索的值。
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/
编辑::
谢谢大家的评论......这是更新的代码,我认为最好保留旧功能。所以,有人可以注意到差异。
function inStruct(val,structure)
{
for(a in structure)
{
if(structure[a] == val && structure.hasOwnProperty(a))
{
return true;
}
}
return false;
}
in
在 Javascript 中的功能不同。您必须使用||
(or OR
) 运算符使用多重比较来拆分它们。
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)
如果您需要includes
旧版浏览器(包括 IE)的简单 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;
}
});
如果你想要有用的集合操作函数并且不介意添加库,请查看underscorejs
否则期望编写 for 循环来循环值并执行相等检查。
你可以做到这一点,又好又容易,将值存储在数组中并使用IN
var temparr = ['x', 'y', 'z', '0'];
if (!$get('sslot_hf0').value in temparr) {
$get('sslot_hf0').value = 'X';
}
希望这可以帮助