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

jQuery: conversion from string type to string object in $.each

本文关键字:字符串 类型转换 对象 each jQuery      更新时间:2023-09-26
$.each(["foo","bar"],function(){console.debug(this);});

将字符串类型的"foo"和"bar"转换为字符串对象中的等效项。

而。。。

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

将"foo"和"bar"保留其原始字符串类型。

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

根据 jQuery 文档:

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

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

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

jQuery不应该受到责备:这是JavaScript的一个怪癖。正如 ECMAScript 第三版 10.4.3 节中所定义的,当你调用一个函数时,this伪参数纵:值得注意的是,一个 null 值被转换为全局对象 ( window ),基元值被自动装箱:

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

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

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