这个表达式在JavaScript中是什么意思:if($(element).attr(';id';)在特殊验证中)
我不懂“in”这个关键词 它是一个条件构建器 这就是背景:这个表达式在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
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
操作符(这就是问题所在)无关。