1. Função:
O operador TIPOOF retorna uma string que representa o tipo de dados da expressão.
Strings possíveis são: "número", "string", "booleano", "objeto", "função" e "indefinido".
2. Descrição do valor de retorno comumente usado
| expressão | Valor de retorno |
| Tipo de indefinido | 'indefinido' |
| TIPO DE NULL | 'objeto' |
| TIPO DE VERDADEIRO | 'booleano' |
| Tipo de 123 | 'número' |
| tipo de "abc" | 'corda' |
| typeof function () {} | 'função' |
| typeof {} | 'objeto' |
| typeof [] | 'objeto' |
| tipo de desconhecido | 'indefinido' |
NOTA: Os valores de retorno do tipo são todos strings e todos são cabeçalhos minúsculos.
3. Aplicação regular:
1). Verifique se existe uma variável e tem um valor.
O tipo de retornará "indefinido" em dois casos: quando uma variável não for declarada e quando o valor de uma variável é indefinido. Por exemplo:
> TIPO DE UNDERCLAREDVARIABLE === "Undefined" True
> VAR declarado;
> typeof declarado "indefinido"
> TIPO DO
Existem outras maneiras de detectar se um valor é indefinido:
> var valor = indefinido;
> valor === indefinido true
No entanto, se esse método for usado em uma variável não declarada, uma exceção será lançada, porque apenas o tipo de pode detectar variáveis não declaradas normalmente sem relatar um erro:
> UNDERCLAREDVARIABLE === Referência indefinida: UND -GLAREDVARIABLE não está definido
Nota: Variáveis não iniciadas, parâmetros formais que não são passados em parâmetros e propriedades inexistentes não terão os problemas acima, porque são sempre acessíveis e os valores são sempre indefinidos:
> VAR declarado;
> declarado
> (função (x) {return x === indefinido} ()) true
> ({}). foo === indefinido true
Nota: Portanto, if (window.maybeundeCLaredVariable) {}
Pergunta: O tipo de parece complicado ao concluir essas tarefas.
Solução: esse tipo de operação não é muito comum, então algumas pessoas pensam que não há necessidade de encontrar uma solução melhor. No entanto, alguém pode propor um operador especial:
> definido UND -GLAREDVARIABLE
> VAR declarado;
> definido declarado
Ou talvez alguém precise de um operador que detecte se uma variável é declarada:
> declarado UND -GLAREDVARIABLE
> VAR declarado;
> declarado declarado verdadeiro
Nota do tradutor: em Perl, o operador definido acima é equivalente a definido (), e o operador declarado acima é equivalente a existir (),
2. Determine que um valor não é igual a indefinido e não é igual a nulo
Pergunta: Se você deseja detectar se um valor foi definido (o valor não é indefinido ou nulo), você encontrou uma manifestação estranha de tipo de (que é considerado um bug): tipo de retorna nulo "objeto":
> TIPO DE NULL 'Objeto'
Nota: Isso só pode ser considerado um bug na implementação original do JavaScript, e o padrão agora é padronizado. V8 uma vez corrigido e implementou o tipo de null === "null", mas finalmente se mostrou inviável. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
Solução: não use o tipo OF para realizar esta tarefa, use o seguinte método: no entanto, a variável x deve ser declarada antecipadamente, caso contrário, um erro será relatado.
função isDefined (x) {return x! == null && x! == indefinido; }
Outra possibilidade é introduzir um "operador de valor padrão". Se o MyValue não estiver definido, a seguinte expressão retornará DefaultValue:
myValue || DefaultValue
A expressão acima é equivalente a:
(myvalue! == indefinido && myValue! == null)? MyValue: DefaultValue
De fato, é uma simplificação da seguinte declaração:
myValue = myValue || DefaultValue
3. Distinguir entre valores de objeto e valores originais
A função a seguir é usada para detectar se x é um valor de objeto:
função isobject (x) {return (typeof x === "function" || (typeof x === "objeto" && x! == null)); }
Problema: a detecção acima é mais complicada porque o tipo de trata as funções e objetos como diferentes tipos, e o tipo de retorna nulo "objeto".
Solução: Os seguintes métodos também são frequentemente usados para detectar valores de objeto:
função isobject2 (x) {return x === objeto (x); }
Aviso: você pode pensar que a instância do objeto pode ser usada para detectá -lo aqui, mas a instância do é usada para julgar o relacionamento da instância usando um protótipo usando um objeto. Então, o que devo fazer se um objeto sem um protótipo:
> var obj = object.create (null);
> Object.getPrototypeOf (obj) null
OBJ é realmente um objeto, mas não é uma instância de qualquer valor:
> TIPO DE OBJ 'Objeto'
> obj instância do objeto false
Na prática, você raramente pode encontrar esse objeto, mas ele existe e tem seu objetivo.
Nota do tradutor: Object.Prototype é um objeto que existe por padrão e não possui protótipo.
> Object.getPrototypeOf (object.prototype) null
> typeof object.prototype 'objeto'
> Object.prototype Instância do objeto false
4. Qual é o tipo de valor original?
O TypeOf é a melhor maneira de ver um tipo de um determinado valor original.
> TIPO DE "STRING" ABC "
> TIPO DO
Pergunta: Você deve conhecer o comportamento estranho do tipo de nulo.
> TIPO DE NULL // Tenha cuidado! 'objeto'
Solução: A função a seguir pode corrigir esse problema (somente para este caso de uso).
função getPrimitiveTypeName (x) {
var typename = typeof x;
Switch (nome do tipo) {
Caso "indefinido": case "boolean": case "número": case "string": retornar o tipo de tipo;
case "objeto": if (x === null) {return "null"; }
Padrão: // O julgamento anterior falhou ao passar o novo TypeError ("O parâmetro não é um valor primitivo:"+x);
}}
Uma solução melhor: implemente uma função getTypeName (), que pode não apenas retornar o tipo do valor original, mas também retornar o atributo interno [[class]] do valor do objeto. Aqui falamos sobre como implementar esta função (Nota do tradutor: $ .Type in jQuery é a implementação como esta)
5. se um valor é uma função
O tipo de pode ser usado para detectar se um valor é uma função.
> typeof function () {} 'função'
> typeof object.prototype.ToString 'Função'
Em princípio, a função InstanceOf também pode executar esse tipo de detecção de requisitos. À primeira vista, parece que a escrita é mais elegante. No entanto, o navegador tem uma peculiaridade: cada estrutura e janela tem sua própria variável global. Portanto, se você passar por um objeto em uma determinada estrutura em outra estrutura, a instância do não funcionará corretamente porque as duas estruturas têm construtores diferentes. É por isso que existe um método Array.isArray () no ECMAScript5. Seria bom se houver um método que atravesse a estrutura para verificar se um objeto é uma instância de um determinado construtor. O getTypeName acima () é uma solução alternativa, mas talvez haja uma solução mais fundamental.
6. Visão geral
O seguinte mencionado deve ser a necessidade mais urgente do JavaScript no momento e pode substituir alguns recursos funcionais das responsabilidades atuais do tipoof:
isDefined () (como object.isDefined ()): pode ser usado como uma função ou um operador
isobject ()
getTypeName ()
Um mecanismo que pode detectar se um objeto é uma instância de um construtor especificado nas estruturas
Para verificar se uma variável foi declarada para esse requisito, pode não ser necessário ter seu próprio operador.
O resumo acima do uso do tipo de JS é o conteúdo inteiro compartilhado pelo editor. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.