jquery.each() - “this”vs valueOfElement

时间:2012-10-29 14:14:37

标签: javascript jquery

jQuery.each()循环中,我一直认为this等同于valueOfElement。有人可以解释一下这个区别吗?

示例:

$.each(object, function(i, val){
    $('body').append('<b>valueOfElement:</b> ' + typeof val + ' - ' +  
    '<b>this: </b>' + typeof this + '<br/>');
});

结果:

valueOfElement: string - this: object
valueOfElement: boolean - this: object
valueOfElement: object - this: object

Fiddle

2 个答案:

答案 0 :(得分:14)

答案在您链接到的文档中:

  

也可以通过this关键字访问该值,但是   Javascript将始终将此值包装为Object,即使它是   一个简单的字符串或数字值。

当以this访问时,所有值都嵌入到对象中。

真正的原因可以在jQuery source的这一行中找到:

callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {

您可以将其与

进行比较
(function(){console.log(this)}).call(1);

构建Number,因为你不能在不是对象的东西上调用函数。

来自MDN on the call function

  

thisArg

     

请注意,这可能不是该方法看到的实际值:如果是   method是非严格模式代码中的函数,null和undefined将   被全局对象替换,原始值将被替换   装箱。

使用this代替valueOfElement时,我会看到的唯一优势是:

  • 简单:你不必记住给回调的参数顺序
  • 即使this是原始类型,也可以直接在valueOfElement上使用函数

答案 1 :(得分:0)

this关键字将作为JavaScript对象访问该元素。您可以像使用任何其他JavaScript对象一样获取它的值,或者可以将其包装($(this))以使其成为jQuery对象。