Javascript jQuery:从字符串类型到字符串对象的转换,单位为$
将字符串类型的“foo”和“bar”转换为字符串对象中的等效项 鉴于Javascript jQuery:从字符串类型到字符串对象的转换,单位为$,javascript,jquery,Javascript,Jquery,将字符串类型的“foo”和“bar”转换为字符串对象中的等效项 鉴于 $.each(["foo","bar"],function(){console.debug(this);}); 将保留“foo”和“bar”的原始字符串类型 我想知道为什么$。每个都进行转换?更重要的是。。。如果此转换从未发生-保留字符串的原样,无论它们是字符串类型还是字符串对象?根据: (也可以通过this关键字访问该值,但是 Javascript将始终将该值包装为对象,即使它是 一个简单的字符串或数值。) 这表明进行转换
$.each(["foo","bar"],function(){console.debug(this);});
将保留“foo”和“bar”的原始字符串类型
我想知道为什么$。每个都进行转换?更重要的是。。。如果此转换从未发生-保留字符串的原样,无论它们是字符串类型还是字符串对象?根据:
(也可以通过this关键字访问该值,但是
Javascript将始终将该值包装为对象,即使它是
一个简单的字符串或数值。)
这表明进行转换的是Javascript,而不是jQuery
在回调函数中使用该值的情况下,jQuery传递该值本身,因此可以保留其类型。jQuery在这里不是罪魁祸首:这是JavaScript的一个怪癖。如ECMAScript第三版第10.4.3节所定义,调用函数时,将操纵
此
伪参数:值得注意的是,将空值转换为全局对象(窗口
),并自动装箱原始值:
3) 否则,如果类型(thisArg)不是对象,请将ThisBinding设置为ToObject(thisArg)
参数不会以同样的方式损坏,这就是为什么each()的第二个参数更可靠的原因
JavaScript这样做没有什么特别的理由,它只是Netscape当年做的一件疯狂的事情,然后必须在ECMAScript中进行标准化。在第五版的严格模式下,这种奇怪的行为消失了。我相信引起这种情况的javascript行为是AutoBox原语。
$.each(["foo","bar"],function(i,e){console.debug(e);});