jQuery:$ .each中从字符串类型转换为字符串对象

时间:2012-05-03 13:47:20

标签: javascript jquery

$.each(["foo","bar"],function(){console.debug(this);});

将字符串类型的“foo”和“bar”转换为字符串对象中的等效值。

...而

$.each(["foo","bar"],function(i,e){console.debug(e);});

将“foo”和“bar”保留为原始字符串类型。

我想知道为什么$ .each会进行转换?并且,更重要的是......如果这种转换永远不会发生 - 保留字符串,无论它们是字符串类型还是字符串对象?

2 个答案:

答案 0 :(得分:2)

根据jQuery documentation

  

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

这表明它是Javascript,而不是jQuery正在进行转换。

在回调函数中使用该值的情况下,jQuery会传递该值本身,因此它可以保留其类型。

答案 1 :(得分:1)

jQuery不应该责怪:这是JavaScript的一个怪癖。正如ECMAScript第三版第10.4.3节中所定义的,当您调用函数时,会操纵this伪参数:值得注意的是,空值将转换为全局对象(window)和原语值是自动装箱的:

  

3)否则如果Type(thisArg)不是Object,则将ThisBinding设置为ToObject(thisArg)。

参数不会以相同的方式被破坏,这就是为什么每个()的第二个参数更可靠。

JavaScript没有特别的理由这样做,这只是Netscape当天所做的一件疯狂事情,然后必须在ECMAScript中进行标准化。在第五版的严格模式中,这种奇怪的行为消失了。