Introdução
Se as declarações devem ser declarações que os programadores usam com mais frequência e geralmente precisam fazer julgamentos. Se as declarações geralmente usam sinais duplos para determinar se os dois elementos antes e depois são consistentes. Se eles forem consistentes, o retorno será verdadeiro e execute a seguinte declaração. Caso contrário, execute outras declarações. A conversão de tipo implícito mencionado neste artigo refere -se à conversão causada por ==. Para dar um exemplo simples, um sinal igual duplo não é um sinal de igualdade total, um sinal igual é "===" três sinais iguais, e a declaração "1" == 1, então, em geral, a sequência anterior "1" é convertida no número 1 e depois comparada. Através deste exemplo, você deve entender o que é a conversão implícita do tipo!
Etapas de conversão de tipo implícito
1. Primeiro, verifique se há NAN antes e depois do duplo sinal de igual. Se a NAN existir, todos retornam falsos.
2. Vejamos se existem booleanos antes e depois do duplo sinal. Se houver booleano, converta o booleano em um número. (false é 0, true é 1)
3. Em seguida, verifique se existem seqüências de caracteres antes e depois do duplo sinal. Existem três situações:
1. A outra parte é um objeto e o objeto é convertido usando tostring () ou valueof ();
2. A outra parte é um número e a corda é convertida em um número; (Exemplo já foi dado antes)
3. A outra parte é uma string, compare diretamente;
4. Outros retornam falso
4. Se for um número, a outra parte é um objeto. O objeto toma valueof () ou toString () para comparação, e todos os outros objetos retornarão falsos.
5. NULL, indefinido não executará a conversão do tipo, mas eles são iguais
A ordem de conversão acima deve ser lembrada. Os tipos de perguntas geralmente ocorrem durante as entrevistas.
Conversão numérica do método .ToString () e .valueof () método
Geralmente, achamos que a conversão de um objeto em uma string requer chamar o método tostring () e convertê -lo em um número requer chamar o método valueof (), mas não é tão simples quando é realmente aplicado. Veja o seguinte exemplo de código:
var obj = {WebName: "Haorooms Front-end Blog", URL: "www.vevb.com"} console.log (obj.toString ()); // [objeto objeto]Da mesma forma, vejamos o método ValueOf () novamente:
var arr = [1, 2, 3]; console.log (arr.valueof ()); // [1, 2, 3]
Como pode ser visto no código acima, o método ValueOf () não converte o objeto em um número que reflete o objeto. Em vez disso, usamos ToString ()
var arr = [1, 2, 3]; console.log (arr.toString ()); // 1,2,3
NOTA: Muitos amigos acreditam que, ao converter para uma string, você deve primeiro chamar o método ToString (). De fato, este é um entendimento errado. Devemos entender dessa maneira. Chamar o método ToString () pode ser convertido em uma string, mas não significa necessariamente que a conversão de uma string seja chamar o método ToString () primeiro.
Vejamos o seguinte código:
var arr = {}; arr.valueof = function () {return 1; } arr.toString = function () {return 2; } console.log (arr == 1); // truevar arr = {}; arr.valueof = function () {return []; } arr.toString = function () {return 1; } console.log (arr == 1); // truePodemos ver no código acima que a primeira chamada para valueof () para conversão. Se o ValueOf () não for um valor numérico, a tostragem será solicitada para conversão!
var arr = {}; arr.valueof = function () {return "1"; } arr.toString = function () {return "2"; } console.log (arr == "1"); // trueSe "1" for uma string, a primeira coisa que chama de valueof ().
var arr = [2]; console.log (arr + "1"); // 21
No exemplo acima, o tostring () é chamado; Porque Arr.toString () é seguido por 2.
O processo de conversão é assim. Primeiro, o ARR chamará o método ValueOf () primeiro, mas esse método do número é simplesmente herdado e não reescrito (é claro, essa reescrita não é implementada por nós). O valor de retorno é o próprio objeto de matriz, não um tipo de valor, por isso chamamos o método ToString (), alcançando assim o objetivo de converter em uma string.
resumo
A maioria dos objetos converte implicitamente em tipos de valor é a primeira tentativa de chamar o método ValueOf (). No entanto, o objeto de data é uma exceção. Os métodos ValueOf () e ToString () desse objeto foram cuidadosamente reescritos. O padrão é chamar o método ToString (), como o uso do operador +. Se estiver em outros ambientes de operação aritmética, o método ValueOf () será chamado.
var date = new Date (); console.log (data + "1"); // Sun 17 de abril de 2014 17:54:48 GMT + 0800 (CST) 1console.log (data + 1); // 1460888888556console.log (Data * 1); // 1460888885577