No processo de escrever um programa JS, muitas vezes pode precisar julgar o tipo de objeto. Por exemplo, se você escrever uma função, precisará escrever um código diferente, julgando diferentes tipos de parâmetros.
Primeiro, você pode pensar no operador TIPEOF e ver o exemplo a seguir:
<script type = "text/javascript"> var object = {}; var b = true; alerta (tipo de objeto + "" + tipo de b); </script>Os resultados obtidos são os seguintes:
A partir dos resultados acima, podemos ver que o tipo de objeto pode ser exibido usando o operador TIPEOF. Então, qual será o resultado do escopo do operador TypeOf nulo e indefinido?
/*var object = {}; var b = true; alerta (tipo de objeto + "" + tipo de b);*/ alerta (tipo de null + "" + tipo de indefinido)O operador TIPOOF atua no NULL e na verdade exibe "objeto" (isso parece não científico, eu pensei que exibiria "nulo" "), e os monitores indefinidos" indefinidos "(isso atende ao resultado que esperamos). Portanto, ao usar o operador TIPOOF para julgar o tipo de objeto, seja especialmente cuidadoso, porque esse objeto pode ser nulo. O exposto acima fornece apenas alguns resultados de tipo de atuação nesses objetos. A tabela a seguir lista os resultados do operador do tipo de atuação em boolean, número, string, matriz, data, regexp, objeto, função, nulo, indefinido (os leitores interessados podem testá -lo):
A partir dos resultados da tabela acima, podemos ver que a matriz, data e regexp exibem todos os objetos, então por que não exibir diretamente o tipo de objeto? Isso exige que outro operador seja derivado do operador JS: Instância do Operador, que é usado para determinar se um objeto é um objeto de algum tipo, e o valor calculado é verdadeiro ou falso. Vamos dar uma olhada primeiro:
var agora = new Date (); var padrão =/^[/s/s]*$/; var nomes = ['zq', 'John']; alerta ((agora instanceof date) + "" + (instância do padrão de regexp) + "" + (nomes instayof matriz));
Obviamente, o tipo de objeto pode ser julgado nessa instância, mas isso só pode julgar outros tipos, exceto o tipo básico (incluindo o tipo de string) e não pode julgar o tipo básico. No entanto, a instância nem sempre pode ser julgada normalmente. Considerando o caso de uma estrutura, para determinar que o objeto de seu tipo é um objeto passado por outro quadro, primeiro veja o exemplo a seguir.
main.html
<! doctype html> <html lang = "en"> <head> <title> main </title> </head> <FrameSet cols = "45%,*"> <nome do quadro = "frame1" src = "frame1.html"/> <nome do quadro =/frame1 "src =" estrutura2.htmml ""/"FRODO2" Src = "Frame2.htmml" "/" FRODO2 "Src =" Frame2.htmml ""/"FRODO2" Src = "Frame2.htmml" "/
frame1.html
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> quadro1 </ititle> </ad Head> <script type = "text/javascript"> var names = ['riccio zhang', 'zq', 'John']; </script> <body style = "Background: #ccc"> </body> </html>
frame2.html
<! doctype html> <html lang = "pt"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javascript"> document.write ("top.frame1.names instayof" " + (top.frame1.names de idayof instância do prato de prato; document.write ("<br/>"); document.write ("top.frame1.names instanceof top.frame1.array:" + (top.frame1.names instanceof top.frame1.array)); document.write ("<br/>"); document.write ("top.frame1.array === top.frame2.array?" + (top.frame1.array === top.frame2.array)); </script> </ad Head> <body style = "Background: #747474"> </body> </html>O objeto de nomes está na estrutura do quadro1 e é criado pela matriz da estrutura do quadro1. Se o objeto de nomes for levado para a matriz no quadro2 para comparação, é óbvio que os nomes não são uma instância de matriz no quadro2. Pensa -se que o quadro1 e o quadro2 não sejam os mesmos e a matriz. Do segundo resultado realista, pode -se ver claramente que os nomes são uma instância do quadro onde está localizado. A partir da terceira saída, pode -se observar que a matriz de quadros1 e a matriz de quadros2 são diferentes. Então, o que devo fazer se encontrar a comparação de quadro cruzado acima? Não podemos comparar a matriz correspondente à estrutura sempre. Existe uma maneira necessária de resolver o problema acima. Veja o seguinte código:
var tostring = {} .ToString; var agora = new Date (); Alerta (ToString.Call (agora)){} .ToString significa obter o método da tostração no objeto Objeto (um dos métodos básicos do objeto quando esse método) e ToString.Call (agora) significa chamar o método da tostragem. Chamando o tostring mais nativo () do objeto Data (esse método é o método acima do objeto) pode exibir uma sequência do tipo [Data do objeto]. Se for a matriz, a palavra [matriz de objeto] será gerada. Ou seja, a execução das operações acima exibirá palavras semelhantes a [classe do objeto]. Então, só precisamos julgar essa string para saber seu tipo? A partir disso, você pode escrever a seguinte classe de ferramentas:
ferramentas.js
var ferramentas = (function (indefinido) {var class2Type = {}, tostring = {} .tostring; var fun = {type: function (obj) {return obj === null || obj === obj)? FUN.TYPE (OBJ) === "Array"; i <arr.length; });As ferramentas fornecem métodos como tipo, isarray, isfunction etc. para julgar o tipo de objeto. De acordo com as necessidades reais, você pode adicionar métodos para determinar o tipo sozinho. O tipo aceita um parâmetro OBJ, que retorna o tipo real do objeto em forma minúscula. Por exemplo, se você precisar julgar que o tipo de objeto é a matriz, esse método retornará uma matriz.
De acordo com a classe de ferramentas fornecida acima, reescreva o exemplo acima:
Fram2.html
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> quadro2 </title> <script type = "text/javascript" src = "ferramentas.js"> </script> <script type = "text/javascript"> (top.frame1.names instayof Array)); document.write ("<br/>"); document.write ("top.frame1.names instanceof top.frame1.array:" + (top.frame1.names instanceof 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 ("ferramentas.isarray (top.frame1.names)?" + ferramentas.isarray (top.frame1.names)); </script> </ad Head> <body style = "Background: #747474"> </body> </html>Neste ponto, o tipo de objeto pode ser facilmente julgado pela classe acima.
Nota: No IE, elementos como alertas não podem ser julgados.