Durante o processo de redação do programa JavaScript, o JS converterá automaticamente o objeto em número ou string e o processará de acordo com diferentes contextos. As regras para esta conversão automática são as seguintes:
A regra para converter o objeto automaticamente em string:
1. Se o objeto pertence à classe substituir o método ToString (), o método é chamado. Se o resultado do retorno da chamada toString () for primitivo (string, número, booleano, indefinido, nulo), o valor primitivo será convertido em string e retornado.
2. Se o método tostring () não for substituído pela classe ToString (), o resultado de retorno da chamada tostring () é "[objeto objeto]"; ou o método tostring () é substituído, mas o método retorna o resultado como um objeto. Em seguida, o JS chamará o método ValueOf () do objeto. Se o resultado do retorno da chamada valueof () for primitivo (string, número, booleano, indefinido, nulo), converta o valor primitivo em string e retorna.
3. Se nenhum dos pontos acima for atendido e o valor primitivo não puder ser obtido chamando o método ToString () ou Valueof () do objeto, o JS lançará um erro TypeError.
A regra para converter o objeto automaticamente em número:
1. Chame o método ValueOf () do objeto. Se o valor primitivo for obtido, converta o valor primitivo em número e retorne -o.
2. Se o valor primitivo não puder ser obtido no método valueof (), chame o método ToString () do objeto; Se tostring () retornar um valor primitivo, converta o valor primitivo em número e retornar.
3. Se nenhum dos dois pontos acima não puder ser atendido, o JS lançará um erro TypeError.
Pode -se observar que as regras para converter o objeto automaticamente em string e objeto em número são realmente iguais. A diferença é a ordem do método ToString () e Valueof ().
De acordo com as regras acima, alguns resultados de conversão podem ser bem compreendidos:
1. Para matrizes vazias, ao convertê -las em número, o resultado é 0. Isso ocorre porque o método de matriz valueof () será chamado primeiro. Como o ValueOf () retorna o próprio objeto da matriz, o JS ligará em seguida, o método ToString () da matriz vazia; Como o resultado da matriz vazia ToString () retorna a uma string vazia, a sequência vazia será convertida em um número 0 e devolvida.
2. Para uma matriz com apenas um membro do número, aplique a mesma regra para convertê -la em um número e o resultado final é o número.
3. Para matrizes com vários membros numéricos, uma vez que a string não pode ser convertida em número, o resultado final é NAN.
Quando converter em string? Quando converter em número?
Ao executar a conversão do tipo automático em um objeto, o JS optará por convertê -lo em string ou número, dependendo do tipo de objeto e operador. As regras específicas são as seguintes:
1. Se um objeto aparecer nos dois lados do operador +, converta o objeto em uma string.
2. Todos os objetos (exceto os objetos de data) serão convertidos em número primeiro.
3. Para objetos de data, a prioridade é convertida em string.
Vale ressaltar que, para o operador +, exceto o caso em que objetos ou strings aparecem em ambos os lados do operador, a operação de "converter em número" é realizada em outros casos. Ao mesmo tempo, esta operação também está relacionada à ordem entre valores.
experimentar
A cópia do código é a seguinte:
console.log (3 * []); // 0
console.log (3 * [2]); // 6
console.log (3 * [1,2]); // nan
console.log (3 + [2]); // 32
var agora = new Date ();
console.log (agora + 1); // Qua 26 de março de 2014 10:51:39 GMT + 0800 (CST) 1
console.log (agora - 1); // 1395802299223
console.log (agora * 2); // 2791604598448
console.log (true + true); // 2
console.log (2 + nulo); // 2, nulo é convertido para 0
console.log (2 + indefinido); // nan, indefinido é convertido em nan
console.log (1 + 2 + "gatos"); // 3 gatos
console.log (1 + (2 + "gatos")); // 12 gatos