JavaScript Fundamentos - Variáveis e Tipos de Dados
Tags: javascript, beginners, fundamentals, webdev
Published: 2023-02-06 15:31:17

JavaScript é uma das linguagens de programação mais popular do mundo, é utilizada tanto para desenvolvimento no **front end**, **back end**, **mobile** entre outras finalidades. É uma linguagem interpretada, multi paradigmas e com tipagem dinâmica.

É fundamental conhecer bem a base da linguagem antes de se aventurar a aprender uma **lib/framework** como react, vue e angular.

Nesse post inicial vamos falar sobre os tipos de variáveis e suas características no Javascript.

### Variáveis

Utilizamos as palavras reservadas **Var**, **Let** e **Const** para criação de variáveis em JavaScript.

> As regras de criação de variáveis seguem o padrão **[a-zA-Z0-9_$]**

- As variáveis possuem os seguintes ciclo de vida:

- - _Declaração_: Quando o nome é registrado no contexto de execução (Escopo).
- - _Inicialização_: A variável é inicializada com valor **undefined**.
- - _Atribuição_: Um valor é atribuído para a variável.

#### Características

> **Var** - _Na declaração com VAR quando o escopo é interpretado a variável é inicializada como **undefined** caso tente exibi la antes da mesma ser declarada, não respeitando o bloco e permitindo a redeclaração e reatribuição._

```js
// pi inicializada com undefined
console.log(pi);

var pi = 3.141592;

// permite a redeclaração da variável
var pi = 3;

console.log(pi); // => 3

// Mesmo sendo declarada dentro de um escopo a variáveis é acessada fora (içamento)
if (true) {
  var pi = 2;
}

console.log(pi); // => 2
```

> **Let** - Na declaração com _LET_ o escopo é respeitado, pode ser reatribuida mas não redeclarada.

```js
console.log(pi); // => ReferenceError: Cannot access 'pi' before initialization

let pi = 3.141592;

let pi = 3; // => SyntaxError: Identifier 'pi' has already been declared

pi = 3; // permite reatribuição

// Declarado dentro do escopo não pode acessada fora.
if (true) {
  let pi = 2;
}

console.log(pi); // => 3
```

> **Const** - Na declaração com _CONST_ o escopo é respeitado, não pode ser reatribuido nem redeclarado.

```js
console.log(pi); // => ReferenceError: Cannot access 'pi' before initialization

const pi = 3.141592;

const pi = 3; // => SyntaxError: Identifier 'pi' has already been declared

pi = 3; // TypeError: Assignment to constant variable.

// Declarado dentro do escopo não pode acessada fora.
if (true) {
  const pi = 2;
}

console.log(pi); // => 3
```

### Tipos de dados

Vamos entender os tipos de dados fornecidos pela **JS**.

> Os tipo de dados se dividem em **Primitivos** e **Objetos**.

> Os **Tipos primitivos** são: Number | Boolean | String | Null | Undefined e Symbol.

```js
// O operador typeof retorna uma string indicando o tipo de um operando.

typeof 10; // => 'number'
typeof "JavaScript"; // => 'string'
typeof true; // => 'boolean'
typeof Symbol(); // => 'symbol'
typeof null; // => 'object'
typeof underfined; // => 'underfined'
```

> Os **Tipos Objetos** são valores que representam uma referência em memória que pode ser alterada, exemplo: Function | Object | Arrays | Regex | Date...

```js
typeof function sum(a, b) {
  return a + b;
}; // => 'function'
typeof { name: "Linus Torvald" }; // => 'object'
typeof [1, 2, 3, 4, 5]; // => 'object'
typeof /[a-zA-Z_$]/; // => 'object'
typeof new Date(); // => 'object'
```
Por hoje é isso pessoal, nos próximos postes iremos entrar de forma mais detalhadas nos tipos de dados e as API's fornecidas para sua manipulação.

Obrigado Por ler.

** <small>Exemplos são baseado no curso JavaScript - MasterClass do Rodrigo Branas.  </small>

---

- Links de **referências** e **saiba mais**.
- - [Sintaxe e tipos](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types)

---

> <sub> _Este post tem como objetivo ajudar quem esta começando no aprendizado das tecnologias web, além de servir como incentivo no meus estudos e a criar outros posts pra fixação do aprendizado._ </sub>

---

<p align="center"> Me paga um ☕ ? | pix: <strong>nascimento.dev.io@gmail.com</strong> </p>

---

<h4> <em> Me Sigam :) </em> </h4>

[Linkedin](https://www.linkedin.com/in/nascimento-dev-io/) |
[Github](https://github.com/nascimento-dev-io)