jquery.each() – “this”vs valueOfElement

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

例:

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

结果:

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

小提琴

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

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

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

真正的原因可以在这行jQuery源代码中找到 :

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

你可以将它与之进行比较

 (function(){console.log(this)}).call(1); 

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

来自MDN的呼叫function :

thisArg

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

我在使用this而不是valueOfElement会看到的唯一优点是:

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

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