/ / diferença entre javascript array e jquery set - javascript, jquery, matrizes

diferença entre o array javascript e jquery set - javascript, jquery, matrizes

Eu sou relativamente novo em javascript e muito novo em jquery.

Notei que o conjunto de consultas retornado por jQuery() O seletor compartilha muitas semelhanças com a matriz javascript, por exemplo elementos no conjunto de consultas podem ser acessados ​​pelo colchete [] sintaxe

Então, eu queria saber, existe alguma diferença fundamental entre jquery set e javascript array? Ou eles podem ser pensados ​​como duas maneiras de representar a mesma coisa?

Respostas:

2 para resposta № 1

Como a pessoa responsável por esse recurso do jQuery, pensei em compartilhar algumas anotações históricas.

Se você estudar a API do jQuery, poderá notar algo estranho: o objeto retornado por $()/jQuery() não é apenas um objeto "tipo matriz" com um .length propriedade e [i] acesso aos seus elementos, mas Além disso tem alguns métodos bastante redundantes: .get(i) e .size().

.get(i) é muito semelhante a uma matriz "s [i]: retorna um dos elementos da matriz / objeto jQuery. E .size() é o mesmo que .length.

De fato, se você observar a implementação de .size() você verá que simplesmente retorna o .length propriedade:

// The number of elements contained in the matched element set
size: function() {
return this.length;
},

Há um pouco mais a .get(). Se você não passa um argumento, é o mesmo que .toArray(), e se você passar um argumento, ele permitirá índices positivos e negativos. Índices negativos contam para trás a partir do final da matriz, semelhante ao Python ou Ruby.

Mas, no caso simples de um índice não negativo, .get(i) se resume a:

// Get the Nth element in the matched element set
get: function( num ) {
return this[ num ];
},

Por que toda essa redundância? .size() e .get(i) basta fazer a mesma coisa que o habitual .length ou [i], então por que ter os dois?

Na primeira versão do jQuery em janeiro de 2006 (muito antes da 1.0), o objeto retornado por $() estava não um objeto "semelhante a matriz". Era apenas um objeto JavaScript com .get(i) e .size() métodos. A lista real de elementos DOM era uma propriedade "privada" separada do objeto jQuery, e você deveria usar esses métodos para acessar seus elementos e comprimento.

Enquanto eu trabalhava com o lançamento inicial do jQuery, parecia um pouco desajeitado precisar chamar .get(i) e .size() para acessar os elementos do jQuery retornadoobjeto. Esse objeto parecia muito com uma matriz, mas você não podia acessar seus elementos da mesma maneira que uma matriz normal. Então pensei: por que não fazê-lo agir mais como uma matriz real com [i] e .length?

Foi uma mudança bastante simples de fazer isso, então seguimos em frente, mas mantivemos a velha .get(i) e size() métodos para compatibilidade com código que já os usou.

Agora, uma confissão: não lembro o motivo de tornar o objeto de retorno um objeto de matriz em vez de herdar diretamente de Array. (Foi há 11 anos, afinal!)

Teríamos preferido tornar esse objeto ummatriz real, mas havia um bom motivo para isso funcionar. Talvez eu me lembre depois de dormir nele, mas, enquanto isso, é assim que chegamos ao local em que o objeto de retorno do jQuery é "semelhante a um array", mas não um array verdadeiro.


3 para resposta № 2

De seus próprios documentos (encontrado aqui):

O próprio objeto jQuery se comporta como ummatriz; tem um comprimento A propriedade e os elementos no objeto podem ser acessados ​​por seus índices numéricos [0] a [comprimento-1]. Observe que um objeto jQuery não é na verdade, um objeto Javascript Array, para que ele não tenha todo o métodos de um objeto Array verdadeiro, como join ().

Portanto, um objeto jquery é uma espécie de matriz como, mas não é uma matriz. Basicamente, uma matriz terá métodos que o objeto jquery não possui e o objeto jquery possui métodos que não possuem matrizes. Eu geralmente tentaria não tratar os objetos jquery como matrizes e, em vez disso, tentaria usar um método jquery sempre que tentasse usar um método array (ou seja, use .each em vez do método array .forEach).

EDITAR:

Depois de ler mais sobre os objetos jquery, eles compartilham muitos métodos com matrizes, como .find. Além disso, também fornece uma .toArray método que pode ser usado para converter o objeto jquery em um real matriz javascript.


1 para resposta № 3

Um objeto jQuery é um invólucro em torno de uma matriz de elementos DOM. Portanto, uma "matriz jQuery" é um objeto jQuery.