这个表达式在JavaScript中是什么意思:if($(element).attr(';id';)在特殊验证中)

这个表达式在JavaScript中是什么意思:if($(element).attr(';id';)在特殊验证中),javascript,Javascript,我不懂“in”这个关键词 它是一个条件构建器 这就是背景: if ($(element).attr('id') in special_validations) { var validation = special_validations[$(element).attr('id')]($(element).val()); if (validation == true && typeof vali

我不懂“in”这个关键词

它是一个条件构建器

这就是背景:

if ($(element).attr('id') in special_validations)
            {
                var validation = special_validations[$(element).attr('id')]($(element).val());
                if (validation == true && typeof validation == 'boolean')
                    $(element).parent().removeClass('has-error').addClass('has-success');
                else
                {
                    total_errors++;
                    $(element).parent().addClass('has-error').removeClass('has-success');
                    if (typeof validation == 'string')
                        $('<label class="control-label" for="'+$(element).attr('id')+'">'+validation+'</label>').insertAfter(element);
                    else
                        $('<label class="control-label" for="'+$(element).attr('id')+'">Formato no válido</label>').insertAfter(element);
                }
            }
if($(元素).attr('id')在特殊验证中)
{
var validation=special_validations[$(element.attr('id')]($(element.val());
if(验证==true&&typeof验证=='boolean')
$(element).parent().removeClass('has-error').addClass('has-success');
其他的
{
总误差++;
$(element).parent().addClass('has-error').removeClass('has-success');
如果(验证类型=='string')
$(''+验证+'')。插入后面(元素);
其他的
$('Formato no válido')。后面插入(元素);
}
}
关键字检查某个键是否在对象中。请注意,这将检查键,而不是值

因此,您的示例检查元素的ID是否是条件测试中的
特殊验证
对象中的键。


in
表示其他事物的内部。因此,我们可以使用它作为一个条件测试来检查某个东西是否在
其他东西中

对象
中,我们可以检查其中是否存在属性名

var my_object = {first:'a',second:'b',third:'c',fourth:'d'}

console.log( 'first' in my_object ) // returns true
console.log( 'me' in my_object ) // returns false
数组中
,我们可以检查其中是否存在密钥:

var my_object = {first:'a',second:'b',third:'c',fourth:'d'}

console.log( 'first' in my_object ) // returns true
console.log( 'me' in my_object ) // returns false
数组中有五个

var my_array = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
随后,可以使用数字键引用每个元素,如下所示:

my_array[0] = 'a'
my_array[1] = 'b'
my_array[2] = 'c'
my_array[3] = 'd'
my_array[4] = 'e'

console.log( 0 in my_array ) // returns true
console.log( 1 in my_array ) // returns true
console.log( 2 in my_array ) // returns true
console.log( 3 in my_array ) // returns true
console.log( 4 in my_array ) // returns true
console.log( 5 in my_array ) // returns false
var my_array = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
因此
操作符中的
指的是
对象的条件性
包含某个属性名


中使用数字键循环数组 假设您有一个数组,如下所示:

my_array[0] = 'a'
my_array[1] = 'b'
my_array[2] = 'c'
my_array[3] = 'd'
my_array[4] = 'e'

console.log( 0 in my_array ) // returns true
console.log( 1 in my_array ) // returns true
console.log( 2 in my_array ) // returns true
console.log( 3 in my_array ) // returns true
console.log( 4 in my_array ) // returns true
console.log( 5 in my_array ) // returns false
var my_array = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
您可以使用for循环对以下各项进行迭代:

for(var key=0; key<my_array.length; key++){
    var this_element = my_array[key]
}
因此,
中的
操作符引用
数组中的每个


中使用非数字键循环对象
中的
运算符通常与JavaScript中的
for
循环通过
对象
属性名一起使用

这对于具有属性的
对象
特别有用,这些属性在某种程度上被视为
数组

很多时候,您可能不知道对象中存在多少属性,甚至不知道属性名是什么

例如,这是一个典型的对象

var my_object = {first:'a',second:'b',third:'c',fourth:'d'}
每个属性都可以用它们的属性名引用,如下所示:

my_object['first']  = 'a'
my_object['second'] = 'b'
my_object['third']  = 'c'
my_object['fourth'] = 'd'
for(var element in my_array){}
因此在这里,我们看到属性不是像
数组那样用简单的整数定义的。因此,我们必须使用
in
操作符引导我们遍历
对象
属性

对象
属性很少像JavaScript
数组那样有数字键。因此,无法对
循环执行传统的数值

因此,与传统上使用明确的数值边界为
循环定义
不同,您可以使用
中的
写入以下内容,而不在
循环参数的
中包含任何明确边界,如下所示:

my_object['first']  = 'a'
my_object['second'] = 'b'
my_object['third']  = 'c'
my_object['fourth'] = 'd'
for(var element in my_array){}
因此,
中的
操作符引用
对象的每个属性名


中的
一起用于
对象具有固有属性

例如,
数组
是一种
对象
类型,所有
数组
在其对象原型中都具有
长度
属性

只需定义一个空对象,它就具有某些属性。在
中使用
for
循环将迭代这些不需要的属性,并且“可能”破坏您的代码

因此,即使在空的
数组中

console.log( 'length' in new Array() ) // returns true
同样的原理可能会导致
for
循环迭代不需要的属性,具体取决于您的web浏览器和版本。

“因此,
中的JavaScript操作符
引用数组中的每个元素。”?你能详细说明一下吗?“[…]在某种程度上被视为数组元素[…]”:这很令人困惑。“这是一个类似数组的对象”不类似数组的对象的示例是什么?对象只是键值存储。数组是键值存储的专用版本,其中键是数字的。说一个对象“像一个数组”充其量是令人困惑的,最糟糕的是完全错误的。“因此in运算符引用数组中的每个元素。”这并不完全正确
for/in
迭代对象的属性名称。如果您有一个数组,这意味着它会迭代数组的索引。然后可以使用该索引引用相应的元素。但同样,您描述的是
for/in
循环,它与
in
操作符(这就是问题所在)无关。