1. El método para juzgar una matriz real
La forma más fácil de declarar una matriz en JavaScript es:
var a = [];
La forma más directa de determinar si es una matriz es:
La copia del código es la siguiente:
una instancia de matriz // Verdadero
A.Constructor == Array // Verdadero
Aquí viene una instancia de sintaxis. InstanceOf es un operador de la nube. Como "+-*/", su sintaxis es la siguiente:
resultado = obj intacef class
Se utiliza para determinar si un objeto es una instancia de una clase, y el resultado de la operación devuelve verdadero o falso. La definición de clase en JavaScript se inicializa a través de un constructor, por lo que el operador correcto de la instancia de sintaxis debe ser una instancia de función, es decir, la función de instancia de clase debe ser verdadera, y si el operador correcto no es una función cuando se usa instanciaf, se lanzará una excepción de typeError. Todos los objetos son instancias de objeto, por lo que cualquier instancia de objeto de objeto devuelve verdadero. Aunque decimos que los objetos se inicializan a través de los constructores, InstanceOF no verifica si el objeto está construido por la función, pero es heredado por el prototipo del constructor. El siguiente ejemplo puede ilustrar este problema:
La copia del código es la siguiente:
Rango de funciones (bajo, alto) {
this.low = bajo;
this.high = alto;
}
Range.prototype.constructor == rango; //verdadero
Range.prototype = {
incluir: function (x) {return (x> = this.low && x <= this.high); },
excluir: function (x) {return (x <this.low && x> this.high); }
}
var r = nuevo rango (0, 100);
r instancia de rango; //FALSO
r instancia de objeto; //verdadero
Range.prototype.constructor == objeto; //verdadero
Aunque R se construye a través de un nuevo rango, R no es una instancia de rango. Este es el problema. La declaración de asignación de rango.prototipo anula el constructor predeterminado. Antes de que se asigne el prototipo, el range.prototype.constructor es el rango, y después de hacer la asignación, se convierte en un objeto. Esto es fácil de entender porque
La copia del código es la siguiente:
Range.prototype = {
incluir: function (x) {return (x> = this.low && x <= this.high); },
excluir: function (x) {return (x <this.low && x> this.high); }
}
Realmente equivalente a:
La copia del código es la siguiente:
Range.prototype = nuevo objeto ({
incluir: function (x) {return (x> = this.low && x <= this.high); },
excluir: function (x) {return (x <this.low && x> this.high); }
});
Entonces, range.prototype.constructor == objeto, entonces la instancia creada a través de un nuevo rango es, por supuesto, una instancia de objeto.
Es más directo ver la explicación oficial:
La instancia del operador en realidad no verifica si R fue inicializado por el constructor de rango. Verifica si hereda de Range.prototype.
También hay un tipo de función en JavaScript que tiene funciones similares como instancia, pero devuelve tipos de datos básicos específicos: número, cadena, función, objeto, indefinido, booleano. Solo hay estos seis tipos, y aquellos que no están dentro de estos seis tipos devuelven objeto, es decir, typeof ([]) devuelve objeto, no una matriz.
Otra sintaxis involucrada es el constructor, el constructor devuelve el constructor del objeto:
La copia del código es la siguiente:
var a = [];
A.Constructor; //Formación
El constructor es la función de inicialización de un objeto, que usa nuevas llamadas. Si el objeto es una matriz, entonces su constructor debe ser una matriz, y la clase que escribió no es necesariamente cierta, porque el constructor en el prototipo puede cambiarse.
2. Método para juzgar la pseudo-matar
Hay una pseudo-array en JavaScript. Se puede atravesar utilizando un método transversal similar a la matriz. Tiene un atributo de longitud para obtener la longitud del elemento. Puede usar el subíndice [] para obtener el elemento especificado. Llamamos a este tipo de objeto un pseudo-array. El objeto en jQuery es un pseudo-matriz típico, como se muestra en la figura a continuación:
Por lo tanto, la clave para juzgar si se trata de una pseudo-array es juzgar si hay un atributo de longitud y si hay un empalme de la función de operación de matriz básica. El siguiente es el método de juicio:
La copia del código es la siguiente:
var is_array = function (valor) {
Valor de retorno &&
typeoF value === 'objeto' &&
typeof value.length === 'Número' &&
typeof value.splice === 'function' &&
! (valor.propertyisenumerable ('longitud'));
};
Aquí PropertyIsenumerable se usa para determinar si la propiedad de longitud es enumerable. De hecho, el objeto de cadena nativo también tiene un efecto de matriz, pero no podemos tratarlo como un objeto de matriz, por lo que necesitamos juzgar el valor de typeOf == "objeto", porque typeOf un objeto de cadena devuelve una cadena.