这将返回一个 jQuery 对象。什么是 jQuery 对象。它是一个对象、一个数组还是两者的某种组合?
$("#id")
我在这里寻找源代码,但找不到它。
首先,它不是什么。
jQuery 对象不是数组。
在 JavaScript 中,有内置的原生构造函数。其中之一是Array。但最终Array构造函数会创建对象。jQuery 对象不是从 Array 构造函数构建的。
那么 Object 与 Array 有什么不同呢?
由于Object和Array是内置的本机构造函数,因此从构造函数创建的对象具有内部[[Class]]属性。你可以像这样看到它的价值。
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call([]); // [object Array]
所以你可以看到这些对象有区别。
还有哪些不同之处?
两个对象的原型链是不同的。对于一个普通的对象,它可以像这样可视化。
{} ---> Object.prototype ---> null
而对于一个数组,像这样。
[] ---> Array.prototype ---> Object.prototype ---> null
因此,您可以看到它们的继承也将它们区分开来。
那么jQuery对象呢?
jQuery 对象更像是一个普通的对象,而不是一个数组。但是 JavaScript 允许您定义自定义(非内置)构造函数。
toString值将与 Object 相同,[object Object]但原型链将不同。
function Foo() {
}
new Foo() ---> Foo.prototype ---> Object.prototype ---> null
所以 jQuery 的原型链将与此类似,但使用jQuery构造函数而不是Foo.
那么,这意味着什么?
JavaScript 中的所有对象都相似,因为它们都继承自Object.prototype*,但是您可以拥有具有扩展原型链的不同对象,也可以拥有具有内部[[Class]]属性的本地对象,从而使它们与众不同。
所以要回答“什么类型的对象是jQuery对象”的问题,答案是它是一个Object.prototype像每个对象一样继承自的对象,但也继承自prototype其自定义构造函数的。
* 请注意,在 ES5 中,您也可以拥有一个没有原型链的对象。它的链立即以 终止null。
但是 jQuery 对象在数字索引处存储 DOM 元素,并且有一个.length属性。这不是使它成为一个数组吗?
不,这只是使它成为具有数字属性和名为length.
var myObj = {};
myObj[0] = "foo";
myObj[1] = "bar";
数组的属性并不特殊。它们与对象的属性相同。
var myArr = [];
myArr[0] = "foo";
myArr[1] = "bar";
这两个代码示例正在做完全相同的事情。
他们在做同样的事情?真的吗?
差不多吧。Array 对象和 Object 对象之间的属性本身没有什么不同,但是 Array 有一些特殊的行为。
例如,如果我在比当前.length帐户更高的索引处添加属性,.length则会自动调整。
myArr.length; // 2
myArr[9] = "baz";
myArr.length; // 10
在一个阵列上,.length它本身具有一些“魔法”能力,比如能够通过设置.length一个较低的值来截断阵列。
myArr.length = 1;
myArr[1]; // undefined
因此,虽然 jQuery 对象具有数字属性和.length属性,但它的行为与原生 Array 的行为不同。
$()返回 jQuery 类 ( new jQuery()) 的实例。
因此它继承了所有标准 jQuery 方法,以及所有插件,来自jQuery.prototype(别名为jQuery.fn)
此外,构造函数通过添加属性以及集合中每个元素的索引属性,jQuery()将每个实例转换为类似数组的对象。length
返回的对象(请参阅EcmaScript §4.2.1了解这意味着什么)是 jQuery 内部构造函数的一个实例(jQuery.fn.init- 有关 jQuery 实例化模式的详细信息,请参阅此答案),继承自$.fn原型对象。
当然,它是ObjectJavaScript 中几乎所有对象的一个实例。
而且,因为每个 jQuery 元素都代表一个 [DOM] 元素的集合,所以它看起来像一个Array带有数字索引属性的 —— 尽管该length属性不会自动自我更新,但您可以在其上应用大多数 Array 方法。它不是一个真实的Array实例(什么是数组,什么是 JS?)。
jquery 对象是 jquery 库的一个对象,基本上所有的 jquery 方法和属性都附加到该 jquery 对象上,您不能将其用作普通的 javascript 对象。它也与它是哪个 jquery 对象不同。