1. O método de julgar uma matriz real
A maneira mais fácil de declarar uma matriz em JavaScript é:
var a = [];
A maneira mais direta de determinar se é uma matriz é:
A cópia do código é a seguinte:
uma instância de matriz // true
a.Constructor == Array // true
Aí vem uma instância da sintaxe. Instância do operador de nuvem. Como "+-*/", sua sintaxe é a seguinte:
Result = OBJ Intenceof of Class
É usado para determinar se um objeto é uma instância de uma classe e o resultado da operação retorna verdadeiro ou falso. A definição de classe no JavaScript é inicializada por meio de um construtor; portanto, o operador certo da sintaxe da sintaxe deve ser uma instância de função, ou seja, a função de classe de classef deve ser verdadeira e, se o operador correto não for uma função ao usar a instância, uma exceção do TypeError será lançada. Todos os objetos são instâncias de objeto; portanto, qualquer instância do objeto do objeto retorna true. Embora diga que os objetos são inicializados por meio de construtores, a instância do não verifica se o objeto é construído pela função, mas é herdado pelo protótipo do construtor. O exemplo a seguir pode ilustrar esse problema:
A cópia do código é a seguinte:
faixa de função (baixa, alta) {
this.low = baixo;
this.High = alto;
}
Range.prototype.Constructor == Range; //verdadeiro
Range.prototype = {
inclua: function (x) {return (x> = this.low && x <= this.high); },
exclude: function (x) {return (x <this.low && x> this.high); }
}
var r = novo intervalo (0, 100);
R intervalo de Ranha; //falso
r instância do objeto; //verdadeiro
Range.prototype.Constructor == Object; //verdadeiro
Embora R seja construído através de um novo intervalo, R não é uma instância de intervalo. Este é o problema. A instrução RANGE.PROTOTYPE ASSISTIMENTO SUBLIMENTE O CONSTRUTOR PADRÃO. Antes que o protótipo seja atribuído, o range.prototype.Constructor é o alcance e, após a tarefa ser feita, ele se torna um objeto. Isso é fácil de entender porque
A cópia do código é a seguinte:
Range.prototype = {
inclua: function (x) {return (x> = this.low && x <= this.high); },
exclude: function (x) {return (x <this.low && x> this.high); }
}
Realmente equivalente a:
A cópia do código é a seguinte:
Range.prototype = novo objeto ({
inclua: function (x) {return (x> = this.low && x <= this.high); },
exclude: function (x) {return (x <this.low && x> this.high); }
});
Então range.prototype.constructor == Objeto, então a instância criada por meio do novo intervalo é, obviamente, uma instância do objeto.
É mais direto ver a explicação oficial:
A instância do operador não verifica se R foi inicializado pelo construtor de intervalo. Ele verifica se ele herda do range.prototype.
Há também um tipo de função no JavaScript que possui funções semelhantes às do Instância, mas retorna tipos específicos de dados básicos: número, string, função, objeto, indefinido, booleano. Existem apenas esses seis tipos, e aqueles que não estão dentro desses seis tipos retornam objeto, ou seja, tipoof ([]) retorna objeto, não matriz.
Outra sintaxe envolvida é o construtor, o construtor retorna o construtor do objeto:
A cópia do código é a seguinte:
var a = [];
a.Constructor; //Variedade
O construtor é a função de inicialização de um objeto, que usa novas chamadas. Se o objeto for uma matriz, seu construtor deve ser uma matriz e a classe que você escreveu não é necessariamente verdadeira, porque o construtor no protótipo pode ser alterado.
2.
Há um pseudo-gray em JavaScript. Pode ser percorrido usando um método de travessia semelhante à matriz. Ele tem um atributo de comprimento para obter o comprimento do elemento. Você pode usar o subscrito [] para obter o elemento especificado. Chamamos esse tipo de objeto de pseudo-gray. O objeto no jQuery é um pseudo-matriz típico, como mostrado na figura abaixo:
Portanto, a chave para julgar se é uma pseudo-matriz é julgar se existe um atributo de comprimento e se existe uma emenda básica de função de operação da matriz. A seguir, o método de julgamento:
A cópia do código é a seguinte:
var is_array = function (value) {
Valor de retorno &&
tipoof valor === 'objeto' &&
typeof value.length === 'número' &&
typeof value.splice === 'function' &&
! (value.propertyisenumerable ('comprimento'));
};
Aqui, a propriedadesenumerable é usada para determinar se a propriedade de comprimento é enumerável. De fato, o objeto de string nativo também tem um efeito de matriz, mas não podemos tratá -lo como um objeto de matriz, por isso precisamos julgar o tipo de valor == "objeto", porque o tipo de objeto String retorna uma string.