正如我测试的那样,In [221]: out[:,unqID.argsort()]
Out[221]:
array([[ 1. , 1. , 1. , 1. , 1. , 1. ],
[ 0.5, 1. , 2.5, 4. , 2. , 3.5],
[ 1. , 1.5, 3. , 4.5, 2.5, 4. ],
[ 228. , 307. , 170.5, 452. , 351. , 396. ]])
是$('foo')
的实例,而不是jQuery
的实例。和AFAIK,javascript没有运算符重载。
那么如果Array
不是$('foo')[0]
的实例,HTMLElement
如何返回相应的$('foo')
?
我试着看看jQuery的源代码,但现在对我来说有点太多了。
感谢您的任何见解。
答案 0 :(得分:7)
因为您可以在JavaScript中使用括号表示法与任何对象,而不仅仅是数组。实际上,JavaScript中的普通数组aren't really arrays at all,它们只是具有特定原型的对象,并且对一类属性名称(“数组索引”)和特殊length
属性进行特殊处理。
括号表示法可用于通过其字符串名称访问任何对象属性 1 (无论信不信,[0]
在访问数组时转换为["0"]
,理论)。
示例:
var obj = {foo: "bar", 0: "zero"};
console.log(obj[0]); // zero
console.log(obj["0"]); // zero
console.log(obj.foo); // bar
console.log(obj["foo"]); // bar
var f = "f" + "o" + "o";
console.log(obj[f]); // bar
上面的对象有两个属性。他们的名字是"0"
和"foo"
;这两个名字都是字符串(即使我在初始化程序中将0
写为数字文字;它会被强制转换为字符串)。
jQuery维护其“数组条目”属性,以确保您可以使用括号表示法来访问它们。它还保留length
属性。
如果今天从头开始编写jQuery,它可能会扩展Array
。但是当编写jQuery时,无法扩展Array
。 (从ES2015(“ES6”)class
功能开始,它才成为可能。)
1 除没有字符串名称的属性外; ES2015引入了名称为Symbol
而非字符串的属性概念。在此之前,所有对象属性名称都是字符串(甚至是数组索引)。