Bom, só pra completar, este é o trecho da especificação da linguagem que define o ponto como separador decimal:
DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigits[+Sep]opt ExponentPart[+Sep]opt
. DecimalDigits[+Sep] ExponentPart[+Sep]opt
Repare que antes de DecimalDigits
há um ponto (.
), ou seja, é o único caractere permitido para separar casas decimais em um literal numérico.
Interessante notar também que o ponto pode ser o primeiro caractere (e neste caso a parte inteira é zero), ou seja, x = .5
é o mesmo que x = 0.5
.
Já no caso de usar vírgula, como por exemplo:
x = (1,2);
console.log(x);
Neste caso a vírgula é um operador que vai avaliando as expressões, e retorna o valor da última. No caso, 1,2
é uma expressão com o operador vírgula e dois operandos (os números 1
e 2
). Ele avalia o valor de cada uma delas (que no caso é o próprio valor numérico) e retorna o valor da última (ou seja, 2
). Por isso x
vale 2
ao final da execução.
Vale notar que sem parênteses muda:
x = 1,2;
console.log(x);
Porque neste caso os operandos são a expressão x = 1
e o número 2
(porque a vírgula tem precedência menor que o =
). Embora o resultado do operador vírgula ainda seja 2
(pois é o valor da última expressão avaliada), x = 1
foi executado de forma "independente" (antes de avaliar o valor da expressão 2
), por isso o valor de x
ao final é 1
.
De qualquer forma, foi muito bom tocar neste ponto, pois usar a vírgula achando que vai funcionar é um erro bem comum entre iniciantes (não só em JS, inclusive).