O ponto "." possui duas semânticas em JavaScript
Semântica 1. Representa o ponto decimal (número de ponto flutuante) em aritmética, como 2,5
Semântica 2. Obtenha atributos e métodos de objetos, como [].push(2)
Quase não há nada difícil de entender, mas a seguinte questão é interessante.
Copie o código do código da seguinte forma:
// Como esta linha de código será executada?
1.toString();
Como segue no Firebug
O ponto aqui expressa a semântica 1 mencionada acima, portanto o ponto deve ser seguido por um número. O que segue aqui é toString, e a sintaxe do relatório está errada.
A solução é muito simples, como adicionar parênteses
Copie o código do código da seguinte forma:
(1).toString();
Você ainda pode escrever assim, mas é mais difícil de entender
Copie o código do código da seguinte forma:
1..toString();
A razão pela qual ele pode ser executado em navegadores é porque cada mecanismo JS do navegador entende "1..toString()" como "1.0.toString()". O primeiro ponto aqui é semântico 1 e o segundo ponto é semântico 2.
Existe uma maneira ainda mais estranha de escrever, mas nenhum erro é relatado.
Copie o código do código da seguinte forma:
1.toString(); // Observe que há um espaço antes do ponto final.
Obviamente, o ponto aqui é semântico 2, ou seja, o mecanismo JS irá ignorar os espaços antes do operador ponto. Na verdade, não importa os espaços antes ou depois dele, ele será ignorado. do seguinte modo
Copie o código do código da seguinte forma:
1. toString(); // Existe um espaço antes e depois do ponto final.
1. toString(); // Existem dois espaços antes e depois do ponto final.
1.toString(); // Existe uma aba antes do período
1. toString(); // Existe uma tabulação antes e depois do ponto.
O mecanismo JS não apenas ignorará espaços, mas também ignorará tabulações.