Ao contrário do idioma Java, as matrizes no JavaScript têm três recursos:
1. Sem tipo. Os membros de uma matriz podem ser de qualquer tipo, e a mesma matriz também pode ser composta por muitos tipos diferentes de membros.
2. O comprimento é variável. O comprimento de uma matriz pode ser alterado dinamicamente, portanto, não há problema de limites fora do acesso da matriz no JavaScript.
3. Descontinuidade. As posições dos membros da matriz podem ser contínuas (0, 1, 2, 3…) ou descontínuas. Qualquer matriz tem um atributo chamado comprimento. Quando os membros da matriz são contínuos, o valor do comprimento é consistente com o número de membros da matriz; Quando os membros da matriz não são contínuos, o valor do comprimento é maior que o número de membros da matriz. Comparado com matrizes contínuas, o desempenho de leitura e gravação de matrizes descontínuas é pior.
experimentar:
A cópia do código é a seguinte:
var o = [42, "Texto da amostra", {x: 88}]; // a matriz JavaScript não é tipped.
console.log (O); // [42, "Texto da amostra", objeto {x = 88}]
o [3] = 27; // a matriz JavaScript é dinâmica.
console.log (O); // [42, "Texto da amostra", objeto {x = 88}, 27]
o [5] = 99; // JavaScript Matriz é escasso.
console.log (O); // [42, "Texto da amostra", objeto {x = 88}, 27, indefinido, 99]
Como pode ser visto no exemplo acima, para matrizes descontínuas, o JavaScript retornará indefinido ao acessar o membro ausente. Se a matriz for contínua, mas um de seus membros estiver indefinido, o resultado do acesso à matriz é o mesmo:
A cópia do código é a seguinte:
var a = [42, "Texto da amostra", {x: 88}, 27, indefinido, 99];
console.log (a); // [42, "Texto da amostra", objeto {x = 88}, 27, indefinido, 99]
A matriz é descontínua e tem membros desaparecidos, o mesmo que a matriz é contínua, mas tem membros indefinidos. Nos dois casos, o resultado do acesso ao conteúdo da matriz é o mesmo. Mas ainda existem algumas diferenças sutis entre os dois, manifestados principalmente no acesso à chave da matriz:
A cópia do código é a seguinte:
console.log (4 em o); // false
console.log (4 em a); // true
Pode -se observar que, embora os resultados obtidos acessando o conteúdo nesses dois casos sejam iguais, seu mecanismo interno é completamente diferente: quando a matriz é descontínua, um certo membro está ausente; portanto, ao acessar o membro, o JavaScript retorna indefinido; Quando a matriz é contínua, todos os membros existem, mas os valores de alguns membros são relativamente especiais e são indefinidos.
A partir do exemplo acima, também podemos ver que a essência das matrizes no JavaScript é apenas um objeto com números como teclas, e não há diferença entre os valores e objetos comuns de chave. De fato, ao ler e escrever uma matriz, o JavaScript tentará converter os parâmetros em números inteiros positivos. Se a conversão for bem -sucedida, a operação da matriz será executada (atualize automaticamente a propriedade Length da matriz). Se falhar, os parâmetros serão convertidos em uma string e depois leem e gravarão em um objeto normal. Obviamente, na implementação do intérprete JavaScript, muitas otimizações de desempenho são feitas para o recurso de matrizes usando números como chaves. Portanto, no uso real, se as teclas do objeto forem todos os números, o uso diretamente do objeto da matriz obterá resultados mais eficientes.
No processo de definição de uma matriz, o JavaScript permite que vírgulas extras apareçam e também permite a falta de membros da matriz entre duas vírgulas:
A cópia do código é a seguinte:
var x = [1,2,3,]; // vírgula à direita será omitida.
console.log (x.length); // 3
var y = [1, 3]; // Membro pode ser perdido.
console.log (y); // [1, indefinido, 3]
console.log (1 em y); // false
console.log (y.length); // 3
Para criação de matrizes, o JavaScript suporta quatro métodos:
1. Use literais (como expressões de suporte nos exemplos acima) para criar diretamente um objeto de matriz.
2. Use o construtor Array () e não passa em nenhum parâmetros. Nesse caso, uma matriz vazia é criada com o mesmo efeito que [].
3. Use o construtor da matriz () para passar em um número inteiro positivo como o comprimento da matriz. Nesse caso, o JavaScript reservará o espaço de memória correspondente para armazenar essa matriz. Vale a pena notar que as chaves da matriz não são definidas neste momento, ou seja, não há membros na matriz. Seu efeito é equivalente ao de [,,,]
4. Use o construtor Array () para passar nos membros da matriz.
experimentar:
A cópia do código é a seguinte:
var z = nova matriz (10); // a memória pré-alocada, mas nenhum índice ainda está definido.
console.log (3 em z); // false
var m = nova matriz (42, 33, 99, "teste", {k: 99});
console.log (m); // [42, 33, 99, "teste", objeto {k = 99}]
No padrão Ecmascript 5, Array.isarray () pode ser usado para determinar se um objeto é uma matriz:
A cópia do código é a seguinte:
Array.isarray ([]); // true
Array.isarray ({}); // false