这个表达式在JavaScript中意味着什么:if(special_validations中的$(element).at

What does this expression mean in JavaScript : if ($(element).attr('id') in special_validations)

本文关键字:validations special 中的 at element if 表达式 JavaScript 什么 意味着      更新时间:2023-09-26

我不懂关键字"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);
                }
            }

in关键字检查某个键是否在对象中。请注意,这会检查键,而不是值。

因此,您的示例检查元素的ID是否是special_validations对象中的键。

in a条件测试

in表示其他东西内部的东西。因此,我们可以将其用作条件测试来检查是否有其他东西是in

Object中,我们可以检查其内部是否存在属性名

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

Array中,我们可以检查其中是否存在密钥:

这个数组有五个in it。

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

所以in算子指的是Object的条件包含某个属性名称


in循环使用数字键的数组

假设您有一个数组,如下所示:

var my_array = [ 'a' , 'b' , 'c' , 'd' , 'e' ]

您可以使用for循环来遍历以下各项:

for(var key=0; key<my_array.length; key++){
    var this_element = my_array[key]
}

但您也可以使用in操作符来完成此操作:

for(var key in my_array){
    var this_element = my_array[key]
}

因此,in操作符引用Array内部的每个


in循环使用非数字键的对象

in运算符通常通过JavaScript中的Object属性名称for循环一起使用。

这对于具有属性Objects特别有用,这些属性在某种程度上被视为Array

很多时候,您不确定对象中存在多少属性,甚至不确定属性名称是什么。

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

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'

因此,在这里,我们看到属性不是用简单的整数定义的,比如Array。因此,我们必须使用in运算符引导我们遍历Object属性

Object属性很少像JavaScript Arrays那样具有数字键。因此无法执行传统的数字for循环。

因此,与传统上定义具有明确数字边界的for循环不同,您可以使用in在不将任何明确边界包含在for循环参数中的情况下编写以下内容,如下所示:

for(var element in my_array){}

因此,in运算符引用Object的每个属性名


infor配合使用的危险

对象具有固有属性。

例如,ArrayObject的一种类型,并且所有Arrays在其对象原型中都具有length属性。

只要定义一个空对象,它就会附带某些属性。使用infor循环会迭代这些不需要的属性,""可能会破坏代码。

因此,即使在空的Array:中

console.log( 'length' in new Array() ) // returns true

同样的原理可能会导致for循环遍历不需要的属性,具体取决于您的web浏览器和版本。