Executando verificação de segurança...
8

Estrutura léxica do JavaScript

A estrutura léxica de uma linguagem de programação é o conjunto de regras elemntares que especificam o modo de escrever programas nessa linguagem. É a sintaxe de mais baixo nível de uma linguagem; especificar detalhes de como são os nomes de variáveis, os caracteres delimitadores para comentários e como uma instrução do programa é separada da seguinte.

Conjunto de caracteres

os programas em javascript são escritos com o conjunto de caracteres Unicode. Unicode é um padrão adotado mundialmente que possibilita com que todos os caracteres de todas as linguagens escritas utilizadas no planeta possam ser representados em computadores.

Diferenciação de maiusculas e minúsculas

JavaScript é uma linguagem que diferencia letras maiúsculas de minúsculas. Palavras-chave, variáveis, nomes de funções e outros identificadores da linguagem sempre devem ser digitados corretamente. Por exemplo, a palavra-chave while não pode ser digitada de outras formas, como While ou WHILE. Da mesma forma, online, Online, OnLine e ONLINE são quatro nomes de variável distintos.

Espaço em branco, quebras de linha e caracteres de controle de formato

o JavaScript ignora os espaços que aparecem entre sinais em programas. De modo geral, JavaScript também ignora quebras de linhas (SALVO EM CERTAS EXCEÇÔES). Como é possível usar espaços e novas linhas, podemos formatar e endentar os programas de modo organizado e mais harmonisoso.

Caracteres que o JavaScript reconhece como espaço:

  • \u0020: Espaço normal
  • \u0009: Tabulação
  • \u000B: Tabulação vertical
  • \u000C: Avanço de página
  • \u00A0: Espaço não separável
  • \uFEFF: Marca de ordem de byte
  • Qualquer Unicode da categoria Zs

Caracteres que o JavaScript reconhece como término de linha:

  • \u000A: Avanço de linha
  • \u000D: Retorno de carro (esse termo vem das antigas máquinas de escrever)
  • \u2028: Separador de linha
  • \u2029: Separador de parágrafo

Normalmente, em sistemas Unix/Linux, o fim de linha é representado apenas por \u000A, enquanto em sistemas Windows, é uma combinação de \u000D\u000A.

Sequências de escape Unicode

O JavaScript define sequências especiais de seis caracteres ASCCI pare representar qualquer código Unicode de 16 bits. Esses escapes começam com \u e são seguidos por quatro dígitos hexadecimal. Por exemplo, o escape Unicode para o caractere "É" é \u00E9.


"café" === "caf\u00E9"    // -> true

Normalização

O Unicode permite mais de uma maneira de codificação. Usando o exemplo do 'É', podemos codificá-lo como o caractere Unicode \u00C9 ou como o caractere ASCII 'E' seguido da marca de combinação de acento agudo \u0301. O JavaScript presume que o código-fonte que está interpretando e que já foi normalizado e não tenta normalizar identificadores, strings ou expressões regulares.

Comentários

JavaScript aceita dois estilos de comentários.

// Este é um comentário de uma linha.

 /* Este também é um comentário */ // e aqui está outro comentário.

 /*
 * Este é ainda outro comentário.
 * Ele tem várias linhas.
 */

Literais

São dados que aparecem diretamente no programa, como por exemplo:


12
1.2
"Olá Mundo"
"Oi"
true
false
/javascript/gi
null               


Identificadores e palavras reservadas

Um identificador pode ser qualquer nome. Em JavaScript, esses identificadores podem ser usados para nomear variáveis e funções, bem como para fornecer rótulos para certos laços de código.
Exemplo de idenficadores válidos:


i
my_variable_name
v13
_dummy
$str

Os dígitos não são permitidos como primeiro caractere.

Por padrão, utilizam-se apenas letras e dígitos ASCII, embora o JavaScript permita o uso de qualquer letra e dígito dos caracteres Unicode. Dessa forma, o JavaScript possibilita que os programadores utilizem símbolos matemáticos, como, por exemplo:

 var π = 3.14;

Palavras reservadas

Alguns desses identificadores são reservados para uso interno do JavaScript, ou seja, não podemos atribuir variáveis ou funções com o mesmo conjunto de caracteres.
Por Exemplo:

  • break
  • case
  • catch
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • false
  • finally
  • for
  • function
  • if
  • in
  • instanceof
  • new
  • null
  • return
  • switch
  • this
  • throw
  • true
  • typeof
  • var
  • void
  • while
  • with

Para dificultar ainda mais, alguns identificadores são reservados para o modo restrito,Mas permanecem utilizáveis no modo 'normal'.
Por exemplo:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

O modo restrito também impõe restrições sobre o uso dos identificadores a seguir:

  • arguments
  • eval

Além disso, o JavaScript predefine diversas variáveis e funções globais:

  • Array
  • Boolean
  • Date
  • Error
  • EvalError
  • Function
  • Infinity
  • JSON
  • Math
  • NaN
  • Number
  • Object
  • RangeError
  • ReferenceError
  • RegExp
  • SyntaxError
  • TypeError
  • URIError
  • arguments
  • decodeURI
  • decodeURIComponent
  • encodeURI
  • encodeURIComponent
  • eval
  • isFinite
  • isNaN
  • parseFloat
  • parseInt
  • undefined
  • String

Pontos e vírgulas opcionais

O JavaScript utliza ponto e virgula (;) para separar instruções.
Por exemplo:

a = 3;
b = 4;

Por estarem em linhas diferentes, o uso da vírgula acaba sendo opcional, mas ainda assim recomendado.

Já neste codigo:

a = 3; b = 4;

O uso da vírgula é obrigatório.

Existem duas exceções à regra geral de que JavaScript interpreta quebras de linha como pontos e
vírgulas quando não consegue analisar a segunda linha como uma continuação da instrução da primeira linha.
Por exemplo:

return
true;

JavaScript presume que você quis dizer:
return; true;

Contudo, você provavelmente quis dizer:
return true;

Isso significa que não se deve inserir uma quebra de linha entre return, break ou continue e a expressão que vem após a palavra-chave.

A segunda exceção envolve os operadores ++ e −−.
por exemplo:

x
++
y

Ele é analisado como x; ++y; e não como x++; y.


Usei como referência o livro: JavaScript: O Guia Definitivo.

Carregando publicação patrocinada...
4

Ótimo conteúdo. Cobriu bastante o assunto.

Não sei se já viu esse caso aqui:

x = [0, 1, 4, 6, 19]
y = 0;
x[y++]

Nesse primeiro caso, o x[y++] retorna 0, pois primeiro ele fez x[y] e depois ele fez y= y+1.

Já nesse outro caso:

x = [0, 1, 4, 6, 19]
y = 0;
x[++y]

Agora o retorno de x[y++] é 1, pois primeiro ele fez y=y+1 e depois, com o resultado de y=1, ele faz x[y].

3

Existem identificadores que não são mais usados, mas ainda sim o JavaScript reserva seu conjunto de caracteres.

Peraí, class, const e os outros desta lista são usados sim. A exceção é o enum, que de fato está "reservado para uso futuro". Mas é perfeitamente possível usar class, const e os demais.

Isso está bem descrito na documentação e também na especificação da linguagem:

ReservedWord :: one of
await break case catch class const continue debugger default delete do else enum export extends false finally for function if import in instanceof new null return super switch this throw true try typeof var void while with yield

enum is not currently used as a keyword in this specification. It is a future reserved word, set aside for use as a keyword in future language extensions.

2

Você está certo, é que no livro ele menciona que essas palavras serão usadas em versões futuras:

JavaScript também reserva certas palavras-chave que não são utilizadas atualmente na linguagem, mas que poderão ser usadas em futuras versões. A ECMAScript 5 reserva as seguintes palavras:

class, const, enum, export, extends, import, super

O livro é de 2012, e vou trocar para um mais moderno nas próximas postagens, mas obrigado por corrigir, isso vai me ajudar bastante. Afinal, estou lendo esse livro técnico e anotando tudo que aprendo.