$.each(["foo","bar"],function(){console.debug(this);});
将字符串类型的“foo”和“bar”转换为字符串对象中的等效值。
...而
$.each(["foo","bar"],function(i,e){console.debug(e);});
将“foo”和“bar”保留为原始字符串类型。
我想知道为什么$ .each会进行转换?并且,更重要的是......如果这种转换永远不会发生 - 保留字符串,无论它们是字符串类型还是字符串对象?
答案 0 :(得分:2)
(也可以通过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中进行标准化。在第五版的严格模式中,这种奇怪的行为消失了。