En el proceso de escribir un programa JS, a menudo es posible que deba juzgar el tipo de objeto. Por ejemplo, si escribe una función, debe escribir un código diferente juzgando diferentes tipos de parámetros.
Primero, puede pensar en el operador TypeOf y ver el siguiente ejemplo:
<script type = "text/javaScript"> var objeto = {}; var b = verdadero; alerta (TypeOf Object + "" + typeof b); </script>Los resultados obtenidos son los siguientes:
De los resultados anteriores, podemos ver que el tipo de objeto se puede mostrar utilizando el operador de typeOf. Entonces, ¿cuál será el resultado del alcance del operador de typeof nulo e indefinido?
/*var objeto = {}; var b = verdadero; alerta (TypeoF Object + "" + typeof b);*/ alert (typeof null + "" + typeOf indefinido)El operador de typeOf actúa en NULL y en realidad muestra "objeto" (esto parece poco científico, pensé que mostraría "nulo"), y las muestras indefinidas "indefinidas" (esto cumple con el resultado que esperamos). Por lo tanto, cuando se usa el tipo de operador de typing para juzgar el tipo de objeto, tenga especialmente cuidado, porque este objeto puede ser nulo. Lo anterior solo proporciona algunos resultados de typeOf actuando sobre estos objetos. La siguiente tabla enumera los resultados del operador de typeOf que actúa sobre booleano, número, cadena, matriz, fecha, regexp, objeto, función, nulo, indefinido (los lectores interesados pueden probarlo usted mismo):
De los resultados de la tabla anterior, podemos ver que la matriz, la fecha y el regexp muestran todos los objetos, entonces, ¿por qué no mostrar directamente el tipo de objeto? Esto requiere que otro operador se deriva del operador JS: InstanceOf, que se utiliza para determinar si un objeto es un objeto de algún tipo, y el valor calculado es verdadero o falso. Echemos un vistazo primero:
var ahora = nueva fecha (); patrón var =/^[/s/s]*$/; var nombres = ['zq', 'John']; alerta ((ahora instancia de fecha) + "" + (Pattern instanceOf Regexp) + "" + (nombra instancia de matriz));
Obviamente, el tipo de objeto se puede juzgar a través de esta instancia, pero esto solo puede juzgar otros tipos, excepto el tipo básico (incluido el tipo de cadena), y no puede juzgar el tipo básico. Sin embargo, la instancia de no siempre se puede juzgar normalmente. Teniendo en cuenta el caso de un marco, para determinar que el objeto de su tipo es un objeto pasado por otro marco, primero mire el siguiente ejemplo.
main.html
<! Doctype html> <html lang = "en"> <head> <title> Main </title> </thead> <frameset cols = "45%,*"> <frame name = "frame1" src = "frame1.html"/> <marrum
frame1.html
<! DocType html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame1 </title> </head> <script type = "text/javascript"> var nombres = ['riccio zhang', 'zq', 'John']; </script> <body style = "fondo: #ccc"> </body> </html>
marco2.html
<! DocType html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javaScript"> document.write ("top.frame1.nnames de instancia:" + (top.frame1.names de instancia)); document.write ("<br/>"); document.write ("top.frame1.names instance de top.frame1.array:" + (top.frame1.names instance de top.frame1.array)); document.write ("<br/>"); document.write ("top.frame1.array === top.frame2.array?" + (top.frame1.array === top.frame2.array)); </script> </head> <body style = "fondo: #747474"> </body> </html>El objeto Nombres está en el marco Frame1 y es creado por la matriz del marco Frame1. Si el objeto de nombres se lleva a la matriz en Frame2 para comparar, es obvio que los nombres no son una instancia de matriz en Frame2. Se cree que Frame1 y Frame2 no son los mismos y la matriz en absoluto. Desde el segundo resultado realista, se puede ver claramente que los nombres son una instancia del marco donde se encuentra. Desde la tercera salida, se puede ver que la matriz de Frame1 y la matriz de Frame2 son diferentes. Entonces, ¿qué debo hacer si encuentro la comparación de marco cruzado anterior? No podemos comparar la matriz correspondiente al marco cada vez. Hay una forma necesaria de resolver el problema anterior. Vea el siguiente código:
var toString = {} .ToString; var ahora = nueva fecha (); alerta (toString.call (ahora)){} .ToString significa obtener el método ToString en el objeto del objeto (uno de los métodos básicos del objeto objeto cuando este método) y toString.call (ahora) significa llamar al método de toString. Llamar a la toString () más nativa del objeto de fecha (este método es el método anterior) El método puede mostrar una cadena de tipo [fecha de objeto]. Si es una matriz, se generará la palabra [matriz de objetos]. Es decir, realizar las operaciones anteriores mostrará palabras similares a [clase de objeto]. Entonces, ¿solo tenemos que juzgar esta cadena para conocer su tipo? De esto, puede escribir la siguiente clase de herramienta:
herramientas.js
var herramients varms = (function (undefined) {var class2Type = {}, toString = {} .ToString; var fun = {type: function (obj) {return obj === null || obj === Undefined? Fun.type (obj) === "Array"; 0; name.TOLSWORDCE ();Las herramientas proporcionan métodos como Tipo, IsArray, ISFunction, etc. para juzgar el tipo de objeto. Según las necesidades reales, puede agregar métodos para determinar el tipo usted mismo. El tipo acepta un parámetro OBJ, que devuelve el tipo real del objeto en forma minúscula. Por ejemplo, si necesita juzgar que el tipo de objeto es una matriz, entonces este método devolverá una matriz.
De acuerdo con la clase de herramientas proporcionada anteriormente, reescribe el ejemplo anterior:
fram2.html
<! DocType html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javascript" src = "tools.js"> </script> <script type = "text/javaScript"> document.writ ("top.frame1.names instancef instrics de la instancia:" (" instancia de matriz)); document.write ("<br/>"); document.write ("top.frame1.names instance de top.frame1.array:" + (top.frame1.names instance de top.frame1.array)); document.write ("<br/>"); document.write ("top.frame1.array === top.frame2.array?" + (top.frame1.array === top.frame2.array)); document.write ("<br/>"); document.write ("Tools.isArray (top.frame1.names)?" + Tools.isArray (top.frame1.names)); </script> </head> <body style = "fondo: #747474"> </body> </html>En este punto, el tipo de objeto puede juzgarse fácilmente por la clase anterior.
Nota: en IE, los elementos como la alerta no se pueden juzgar.