Java Script
Java Script
JavaScript
JavaScript é uma linguagem de programação de alto nível, interpretada e principalmente usada para criar
interatividade em páginas web.
É uma linguagem dinamicamente tipada e orientada a objetos, com uma sintaxe mais flexível e fácil de
aprender em comparação com Java. Além disso, JavaScript também suporta paradigmas de programação
funcional e orientada a eventos.
A orientação a objetos é um paradigma de rogramação que organiza o código em torno de objetos, que
podem conter dados (conhecidos como atributos ou propriedades) e funcionalidades (conhecidas como
métodos). Cada objeto é uma instância de uma classe, que define a estrutura e o comportamento dos
objetos.
JavaScript - Polimorfismo
O JavaScript suporta polimorfismo, o que significa que objetos de diferentes tipos podem ser tratados
de maneira uniforme. Por exemplo, várias classes podem implementar o mesmo método de maneiras
diferentes.
Suponha que temos uma classe base chamadaAnimal, que possui um método fazerBarulho():
function Animal(nome) {
this.nome = nome;
}
Animal.prototype.fazerBarulho = function() {
console.log(this.nome + " faz algum barulho.");
};
Agora, vamos criar duas subclasses de Animal: Cachorro e Gato. Cada uma dessas subclasses irá
sobrescrever o método fazerBarulho() com seu próprio comportamento:
function Cachorro(nome) {
Animal.call(this, nome);
}
Cachorro.prototype = Object.create(Animal.prototype);
Cachorro.prototype.constructor = Cachorro;
Cachorro.prototype.fazerBarulho = function() {
console.log(this.nome + " late!");
};
function Gato(nome) {
Animal.call(this, nome);
}
Gato.prototype = Object.create(Animal.prototype);
Gato.prototype.constructor = Gato;
Gato.prototype.fazerBarulho = function() {
console.log(this.nome + " mia!");
};
Agora, podemos criar instâncias de Cachorro e Gato e chamar o método fazerBarulho() em cada uma
delas:
let rex = new Cachorro("Rex");
let whiskers = new Gato("Whiskers");
rex.fazerBarulho(); // "Rex late!"
whiskers.fazerBarulho(); // "Whiskers mia!"
Neste exemplo, tanto Cachorro quanto Gato são subclasses de Animal, e cada uma redefine o método
fazerBarulho() de maneira apropriada. Quando chamamos fazerBarulho() em uma instância de
Cachorro ou Gato, o método apropriado é executado com base no tipo do objeto em tempo de execução.
Isso é um exemplo de polimorfismo em JavaScript, onde objetos do mesmo tipo podem responder a uma
mesma mensagem de maneiras diferentes.
Os navegadores da web fornecem um ambiente de execução para o JavaScript, permitindo que os
scripts sejam incorporados em páginas web e interajam com o HTML e o CSS para criar
experiências interativas para o usuário.
JavaScript também pode ser usado no desenvolvimento de aplicações back-end, além de seu uso
tradicional no front-end. Existem várias tecnologias e frameworks que permitem o uso de
JavaScript no lado do servidor. Algumas das principais opções são:
Node.js
Node.js é um ambiente de tempo de execução JavaScript que permite executar código JavaScript
no servidor. Ele usa o motor V8 do Google Chrome para executar o código JavaScript. Com Node.js, você
pode criar servidores web, APIs, microsserviços e outras aplicações back-end.
Express.js
Express.js é um framework para Node.js que simplifica o processo de criação de servidores web e APIs. Ele
fornece uma camada fina sobre o core do Node.js, facilitando o roteamento de URLs,
manipulação de requisições e respostas, e muito mais.
Nest.js
NestJS é um framework para Node.js que oferece uma arquitetura robusta e modular para construir
aplicações back-end escaláveis. Ele é inspirado em Angular e fornece recursos como injeção de
dependência, roteamento baseado em controladores e suporte para TypeScript.
Meteor.js
Meteor é uma plataforma full-stack que permite desenvolver tanto o front-end quanto o back-end de
uma aplicação usando JavaScript. Ele oferece um conjunto integrado de ferramentas para
desenvolvimento rápido e simplificado, incluindo um sistema de build, um banco de dados em tempo
real e um protocolo de comunicação entre cliente e servidor.
• Quando você usa o método getElementById() em JavaScript, você está interagindo com o DOM
(Document Object Model), que é uma representação em forma de árvore dos elementos HTML de um
documento web.
• Embora JavaScript seja uma linguagem que suporte programação orientada a objetos, o uso
do getElementById() por si só não é necessariamente um exemplo direto de programação orientada a
objetos.
No entanto, o DOM em si é um exemplo de programação orientada a objetos, pois os elementos
HTML são representados como objetos, e você pode interagir com esses objetos usando métodos e
propriedades. O método getElementById() é apenas um dos métodos fornecidos pelo DOM para
selecionar e manipular elementos HTML.
Se você estiver escrevendo um código JavaScript que encapsula a seleção de elementos em uma
função ou método que você criou, então isso pode ser considerado um exemplo de programação
orientada a objetos. Por exemplo:
// Exemplo de programação orientada a objetos
class MeuComponente {
constructor(id) {
this.elemento = document.getElementById(id);
}
alterarTexto(texto) {
this.elemento.innerText = texto;
}
}
// Uso do objeto MeuComponente
const meuObjeto = new MeuComponente("meu-elemento");
meuObjeto.alterarTexto("Novo texto!");
Neste exemplo, criamos uma classe
MeuComponente que encapsula a seleção de um elemento HTML por ID e fornece um método para
alterar seu texto. Isso é um exemplo de programação orientada a objetos em JavaScript, pois estamos
usando classes e objetos para organizar e manipular nosso código.
Detalhes do JavaScript
document.getElementById("demo").innerHTML = "Hello JavaScript";
JavaScript aceita aspas duplas e simples:
document.getElementById('demo').innerHTML = 'Hello JavaScript';
JavaScript pode alterar valores de atributos HTML
Neste exemplo, o JavaScript altera o valor do src atributo (source) de uma tag <img>:
Explicando
JavaScript pode ser usado para alterar dinamicamente os atributos de elementos HTML em resposta a
eventos do usuário, como clicar em um botão.
1º = O primeiro botão tem um evento onclick associado a ele. Quando o botão é clicado, o JavaScript
dentro do atributo onclick é executado
2º = Dentro da função associada ao evento onclick, document.getElementById('myImage').src='pic_bulb
on.gif', o JavaScript seleciona o elemento de imagem com o id "myImage" usando
document.getElementById('myImage').
3º = Uma vez que o elemento de imagem é selecionado, o JavaScript altera o valor do atributo src desse
elemento para "pic_bulbon.gif", o que faz com que a imagem seja alterada para a imagem de uma
lâmpada acesa.
4º = O segundo botão faz a mesma coisa, mas muda o valor do atributo src para "pic_bulboff.gif", tornando
a imagem da lâmpada apagada. Isso demonstra como o JavaScript pode ser usado para manipular
dinamicamente elementos HTML, alterando seus atributos para criar interatividade na página.
JavaScript pode alterar estilos HTML (CSS)
Alterar o estilo de um elemento HTML é uma variante de alterar um atributo HTML:
document.getElementById("demo").style.fontSize = "35px";
A tag <script>
Em HTML, o código JavaScript é inserido entre tags <script>código</script>
Exemplo:
<script>
document.getElementById("demo").innerH
TML = "Meu primeiro JavaScript";
</script>
Exemplos antigos de JavaScript podem usar um atributo type: <script type="text/javascript">.
O atributo type não é obrigatório. JavaScript é a linguagem de script padrão em HTML.
Scripts externos são práticos quando o mesmo código é usado em muitas páginas web diferentes.
Os arquivos JavaScript têm a extensão de arquivo .js
Para usar um script externo, coloque o nome do arquivo de script no atributo src (source) de uma
tag <script>
<script src="myScript.js"></script>
Você pode colocar uma referência de script externo no <head> ou <body>como desejar.
O script se comportará como se estivesse localizado exatamente onde a tag <script> está localizada.
Vantagens externas do JavaScript
Colocar scripts em arquivos externos tem algumas vantagens:
• Ele separa o HTML do código
• Torna HTML e JavaScript mais fáceis de ler e manter
• Arquivos JavaScript armazenados em cache podem acelerar o carregamento da página
Para adicionar vários arquivos de script a uma página - use várias tags de script:
● <script src="myScript1.js"></script>
● <script src="myScript2.js"></script>
Referências Externas
Um script externo pode ser referenciado de três maneiras diferentes:
• Com um URL completo (um endereço da web completo)
• Com um caminho de arquivo (como /js/)
• Sem nenhum caminho
Saída JavaScript
Possibilidades de exibição de JavaScript.
JavaScript pode “exibir” dados de diferentes maneiras:
• Escrevendo em um elemento HTML, usando innerHTML.
• Escrevendo na document.write().
JavaScript pode “exibir” dados de diferentes maneiras:
• Escrevendo em uma caixa de alerta, usando window.alert().
• Escrevendo no console do navegador, usando console.log().
Strings e Booleanos
Strings são usadas para representar texto e podem ser criadas usando aspas simples, duplas ou template
literals. Booleanos, representando true ou false, são cruciais para lógica condicional e tomada de decisões
no código.
Undefined e Null
Undefined é um tipo atribuído automaticamente a variáveis não inicializadas. Null é usado para indicar
intencionalmente a ausência de um objeto. A compreensão desses valores é essencial para gerenciar
estados e erros.
Symbol e BigInt
Symbol cria identificadores únicos, úteis para propriedades de objetos, evitando colisões de nomes.
BigInt permite trabalhar com números inteiros maiores do que 2^53 - 1, ampliando as capacidades do
JavaScript para lidar com grandes quantidades de dados.
Tipagem Dinâmica
JavaScript é uma linguagem de tipagem dinâmica, onde os tipos são determinados em tempo de
execução. Isso oferece flexibilidade, mas requer cuidado e compreensão para evitar bugs relacionados a
tipos, como conversões implícitas e comparações.
Exemplos
// Tipo Number
let idade = 30;
console.log("Idade:", idade);
// Tipo String
let nome = "Pedro";
console.log("Nome:", nome);
Exemplos
// Tipo Boolean
let maiorDeIdade = true;
console.log("Maior de idade:", maiorDeIdade);
Exemplos
// Tipo Undefined
let endereco;
console.log("Endereço:", endereco);
Exemplos
// Tipo Null
let salario = null;
console.log("Salário:", salario);
Exemplos
// Tipo Symbol
let simbolo = Symbol("identificador único");
console.log("Símbolo:", simbolo);
Exemplos
// Tipo BigInt
let numeroGrande = BigInt(9007199254740991);
console.log("Número grande:", numeroGrande);
Tipo Number
Tipo "Number" representa números inteiros e decimais.
Inclui valores especiais como: Infinity, -Infinity e NaN.
Operações matemáticas são possíveis, como: adição, subtração, etc.
Exemplo: let age = 25+5;
Tipo string
Em JavaScript, uma string representa texto.
Pode ser delimitada por aspas simples ('...') ou duplas ("..."). Strings podem ser concatenadas usando o
operador +.
Métodos úteis: length, slice(), e toUpperCase().
Template literals (${...}) permitem interpolação e múltiplas linhas.
Tipo boolean
O tipo boolean em JavaScript tem apenas dois valores: true ou false.
Utilizado frequentemente em condições e operações lógicas. Variáveis booleanas são comumente usadas
para verificar estados, como se um botão está ativo.
Tipo boolean
Muitas funções e métodos retornam valoresbooleanos para indicar sucesso ou falha.
Conversões implícitas podem ocorrer, onde valores como 0, null, undefined e '' são tratados como false.
Tipo BigInt
Um BigInt é criado com a acrescentação de nao final de um inteiro literal — 10n — ou chamando a função
BigInt().
Tipo BigInt
const x = 9007199254740991n;
const y = BigInt(9007199254740991);
// 9007199254740991n
Tipo BigInt
Isso é parecido com um Number em algumas partes, mas difere-se em alguns assuntos importantes — ele
não pode ser usado com métodos no objeto Math e não pode ser misturado em operações ou qualquer
instância de Number.
function exemplo() {
console.log(x); // undefined
var x = 5;
console.log(x); // 5
}
exemplo();
Escopo de Variáveis
O JavaScript apresenta três principais escopos para variáveis: global, de função e de bloco.
As variáveis de escopo global são acessíveis em todo o programa, enquanto as de escopo de função
estão limitadas à função em que são declaradas. Já as variáveis de escopo de bloco, introduzidas com o
ES6, são restritas a blocos de código, como em estruturas condicionais e loops.
Hoisting de Variáveis
O Hoisting ocorre quando declarações de variáveis são movidas para o topo do seu escopo antes da
execução do código.
var é afetado pelo hoisting, enquanto let e const não, tornando-as mais previsíveis e seguras.
Exemplos
// Uso de var
var nome = "Ana";
console.log(nome);
// Uso de let
Let idade = 25;
console.log(idade);
// Uso de const
const PI = 3.14;
console.log(PI);
Qual palavra-chave deve ser usada para declarar uma variável cujo valor não mudará?
R: const
Truthy e falsy
Em JavaScript, truthy e falsy determinam se um valor é considerado verdadeiro ou falso em contextos
booleanos.
Falsy valores incluem: false, 0, "" (string vazia), null, undefined, e NaN.
Todos os outros valores são truthy.
Isso é útil em condicionais, como if statements.
Exemplo: if (nome) {...} executará o código dentro do bloco se nome for truthy.
Conversão de tipos
JavaScript faz conversões automáticas entre tipos.
String para número: Number("5") resulta em 5.
Número para string: String(5) resulta em "5".
Booleano de outros tipos: Boolean(0) é false, Boolean(123) é true.
Uso de == pode resultar em conversão; === não.
Em JavaScript, você pode comparar valores usando o operador de igualdade == ou o operador de
igualdade estrita ===.
Quando você usa ==, o JavaScript tenta converter os operandos para o mesmo tipo antes de fazer a
comparação. Isso pode resultar em resultados inesperados em algumas situações.
console.log(5 == "5");
// true, porque o JavaScript converte a string "5" para o número 5 antes de fazer a comparação
console.log(Por outro lado, quando você usa ===, o JavaScript não faz nenhuma conversão de tipo. Ele
simplesmente compara os valores e os tipos dos operandos. Por exemplo:
console.log(5 === "5");
// false, porque o tipo do primeiro operando (número) é diferente do tipo do segundo operando (string)
Conversão de tipos
Portanto, a principal diferença entre == e === é que == permite a coerção de tipos antes da
comparação, enquanto === não permite. Em geral, é uma prática recomendada usar === para
comparações estritas, pois isso evita resultados inesperados devido à coerção de tipos.
OPERADORES ARITMÉTICOS
• / : Operador de divisão
• * : Operador de divisão
• + : Operador de multiplicação
• - : Operador de subtração
• ++ : Operador de incremento
• – : Operador de decremento
• % : Operador de módulo
(calcula o resto de uma divisão)
Adição +
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de adição</title>
</head>
<body>
<script>
let x = 5;
let y = 10;
let z = x + y;
document.write(z); // Saída: 15
</script>
</body>
</html>
Subtração -
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de subtração</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
let z = x - y;
document.write(z); // Saída: 5
</script>
</body>
</html>
Multiplicação *
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de multiplicação</title>
</head>
<body>
<script>
let x = 5;
let y = 10;
let z = x * y;
document.write(z); // Saída: 50
</script>
</body>
</html>
Divisão /
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de divisão</title>
</head>
<body>
<script>
let x = 10;
let y = 2;
let z = x / y;
document.write(z); // Saída: 5
</script>
</body>
</html>
Incremento ++
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de incremento</title>
</head>
<body>
<script>
let x = 5;
x++; // Incrementa o valor de x em 1
document.write(x); // Saída: 6
</script>
</body>
</html>
Decremento --
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de decremento</title>
</head>
<body>
<script>
let x = 5;
x--; // Decrementa o valor de x em 1
document.write(x); // Saída: 4
</script>
</body>
</html>
Resto da divisão %
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de operador de módulo</title>
</head>
<body>
<script>
let x = 10;
let y = 3;
let z = x % y; // Obtém o resto da divisão de x por y
document.write(z); // Saída: 1
</script>
</body>
</html>
OPERADORES DE ATRIBUIÇÃO
• Operador de atribuição básico é o igual, “=”
• Isso não significa que, ao utilizar alguma atribuição, o valor dele retorna igual, mas, sim, que atribui o
valor que está à direita let nome = 'Joaquim’;
O valor “Joaquim” é atribuído à variável nome
● a = b é atribuído o valor de b em a
● a += b é atribuído o valor de a+b em a
● a -= b é atribuído o valor de a-b em a
● a *= b é atribuído o valor de a*b em a
● a /= b é atribuído o valor de a/b em a
● a %= b é atribuído o valor do resto da divisão de a por b em a
● a **= b é atribuído o valor da exponencial de ab em a
OPERADORES DE COMPARAÇÃO
Os operadores de comparação, que são utilizados para as estruturas condicionais
● Igual (==): verifica se dois valores são iguais, realizando coerção de tipo, se necessário
● Estritamente igual (===): verifica se dois valores são iguais, sem realizar coerção de tipo. Isto é,
verifica se ambos têm o mesmo valor e o mesmo tipo
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de uso de operadores de comparação</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
document.write(x == y); // false
document.write("<br>");
document.write(x === "10"); // false
document.write("<br>");
</script>
</body>
</html>
● • Diferente (!=): verifica se dois valores são diferentes, realizando coerção de tipo, se necessário
● • Estritamente diferente (!==): verifica se dois valores são diferentes, sem realizar coerção de tipo
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de uso de operadores de comparação</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
document.write(x != y); // true
document.write("<br>");
document.write(x !== "10"); // true
</script>
</body>
</html>
OPERADORES LÓGICOS
● Em JavaScript, existem três operadores lógicos principais:
● • && (e), || (ou) e ! (não)
● && (e): retorna true (VERDADE) se ambos os operandos forem VERDADEIROS
● Se um dos operandos for false (FALSO), o resultado será FALSO
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de uso de operadores lógicos</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
document.write(x > y && x < 20); // true
</script>
</body>
</html>
● || (ou): retorna true (VERDADE) se pelo menos um dos operandos for VERDADEIRO
● Se ambos os operandos forem false (FALSO), o resultado será FALSO
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de uso de operadores lógicos</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
document.write(x < y || y < 0); // false
</script>
</body>
</html>
OPERADORES LÓGICOS
● ! (não): inverte o valor do operando. Se o operando for true (VERDADE), o resultado será false
(FALSO)
● Se o operando for false (FALSO), o resultado será true (VERDADE)
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de uso de operadores lógicos</title>
</head>
<body>
<script>
let x = 10;
let y = 5;
document.write(!(x > y)); // false
</script>
</body>
</html>
Operadores
Operadores no JavaScript são símbolos especiais ou palavras-chave que realizam operações em um, dois
ou até três valores (operandos) e retornam um resultado.
Essas operações podem ser aritméticas, de comparação, lógicas, dentre outras.
Eles são fundamentais para a construção de lógicas e algoritmos em programação,
permitindo que desenvolvedores executem tarefas como cálculos matemáticos, comparações entre
valores ou condições, e formatação de strings.
Operadores de Comparação
Permitem comparar dois valores e determinar a relação entre eles, como igualdade, desigualdade, maior
que, menor que, entre outros.
Esses operadores são importantes para a tomada de decisões no código, como em estruturas
condicionais (if...else).
Por exemplo, if (idade>= 18) verifica se a variável idade é maior ou igual a 18.
Operador Ternário
É uma forma concisa de realizar uma operação condicional. Ele é composto por três partes: uma
condição, um resultado se a condição for verdadeira, e um resultado se for falsa, seguindo o formato
condição ? expressão1 : expressão2. É útil para atribuições condicionais simples. Por exemplo, let status
= idade >= 18 ? 'adulto' : 'menor'; atribui 'adulto' à variável status se a idade for maior ou igual a 18, e
'menor' caso contrário.
Template Literals
São strings que permitem expressões embutidas. Delimitados por acentos graves (` `), eles podem conter
placeholders indicados por ${expressão} para inserção de variáveis ou expressões dentro da
string. Isso simplifica a concatenação de strings e a inserção de variáveis, tornando o código mais legível.
Por exemplo, const saudacao = `Olá, ${nome}!`; cria uma saudação personalizada.
Exemplo
Um exemplo que une esses conceitos poderia ser uma função que emite uma mensagem personalizada
com base na idade:
let nome = “Vinicius”;
let idade = 30;
let mensagem = idade >= 18 ? `Olá, ${nome}. Você é um
adulto.` : `Olá, ${nome}. Você é menor de idade.`;
console.log(mensagem);
Qual será o resultado do seguinte código JavaScript?
let idade = 18; console.log(idade >= 18 ? "Adulto" : "Menor");
R: "Adulto"
Funções
Exemplo
● Calcule o produto de dois números e retorne o resultado:
O operador
● O operador () invoca (chama) a função:
● Exemplo - Convertendo Fahrenheit em Celsius:
● Acessar uma função com parâmetros incorretos pode retornar uma resposta incorreta:
Funções em JavaScript
São blocos de código designados para realizar uma tarefa específica e podem ser chamadas sempre que
necessário, evitando repetições e promovendo reutilização de código. Uma função é declarada usando a
palavra-chave function, seguida de um nome, parênteses para parâmetros e chaves que delimitam o
corpo da função.
Parâmetros e Argumentos
Dentro dos parênteses na declaração da função, podemos definir parâmetros, que são variáveis usadas
para receber valores (argumentos) quando a função é chamada. Os argumentos são os dados reais
passados para a função, permitindo que a mesma execute operações com diferentes valores.
Funções usadas como valores de variáveis
• As funções podem ser usadas da mesma forma que você usa variáveis, em todos os tipos de
fórmulas, atribuições e cálculos.
• Em vez de usar uma variável para armazenar o valor de retorno de uma função:
let x = Celsius(77);
let texto = "A temperatura é " + x + " Celsius";
Exemplo
Exercício de fixação
Execute a função chamada myFunção.
function minhaFunção() {
alert("Olá mundo!");
}
minhaFunção();
Expressão de Função
Se refere à prática de atribuir uma função anonimamente a uma variável.
Diferente de uma declaração de função tradicional, a expressão de função não é içada (hoisted), o que
significa que ela não pode ser chamada antes de sua definição no código.
Isso oferece mais flexibilidade em como as funções são usadas e organizadas.
Funções
Função Tradicional: A sintaxe de uma função tradicional é definida com a palavra-chave function,
seguida pelo nome da função (opcional), lista de parâmetros entre parênteses e o corpo da função
entre chaves {}.
function soma(a, b) {
return a + b;
}
Arrow Function
Introduzida no ES6, é uma forma concisa de escrever funções em JavaScript.
Utiliza este símbolo para separar os parâmetros da função do seu corpo.
As Arrow Functions são especialmente úteis para funções anônimas e callbacks, oferecendo uma sintaxe
mais limpa e uma semântica diferenciada para o this.
Arrow Function: A sintaxe de uma arrow function é mais concisa. Ela usa uma seta => após a lista de
parâmetros e não requer a palavra-chave function nem chaves {} se a função tiver apenas uma
instrução de retorno. Se houver mais de uma instrução, as chaves {} são necessárias.
const soma = (a, b) => a + b;
This
Função arrow: Em uma função arrow, o valor de this é capturado a partir do contexto léxico. Isso significa
que this em uma função arrow é determinada pela função que envolve a arrow function e não pode ser
alterada pelo método bind(), call() ou apply().
A principal diferença entre uma função tradicional e uma arrow function em JavaScript está na sintaxe e
no comportamento de this.
Em JavaScript, this é uma palavra-chave especial que é usada em métodos para referenciar o objeto
no qual o método é chamado. O valor de this é determinado pelo contexto de execução de uma
função e pode variar dependendo de como a função é invocada.
Método de um objeto: Quando uma função é chamada como um método de um objeto, o valor de
this dentro da função refere-se ao próprio objeto.
This
const pessoa = {
nome: "João",
saudacao: function() {
console.log("Olá, " + this.nome);
}
};
pessoa.saudacao(); // Saída: "Olá, João"
Função normal: Se uma função é chamada como uma função normal (não como um método de um
objeto), o valor de this depende do modo estrito (strict mode) e do contexto de execução.
function saudacao() {
console.log("Olá, " + this.nome);
}
const obj1 = { nome: "Maria" };
const obj2 = { nome: "Pedro" };
saudacao(); // Saída depende do modo estrito e do contexto de execução
obj1.saudacao = saudacao;
obj1.saudacao(); // Saída: "Olá, Maria"
obj2.saudacao = saudacao;
obj2.saudacao(); // Saída: "Olá, Pedro"
Comportamento de this:
Função Tradicional: Em uma função tradicional, o valor de this é determinado no momento em que a
função é chamada. Isso pode variar dependendo do contexto de execução e de como a função é
invocada. O valor de this pode ser afetado pelo método bind(), call(), apply(), ou quando a função é
chamada como um método de um objeto.
const obj = {
nome: "João",
saudacao: function() {
console.log("Olá, " + this.nome);
}
};
obj.saudacao(); // Saída: "Olá, João"
Comportamento de this:
Arrow Function: Em uma arrow function, o valor de this é definido quando a função é definida e não pode
ser alterada. O valor de this em uma arrow function é herdado do contexto léxico (o contexto no qual a
função é definida) e não é afetado por como a função é chamada.
Comportamento de this:
const obj = {
nome: "João",
saudacao: () => {
console.log("Olá, " + this.nome); // 'this' não se
refere ao 'obj'
}
};
obj.saudacao(); // Saída: "Olá, undefined"
Qual é a principal diferença entre uma função tradicional e uma arrow function em JavaScript?
R: Arrow functions não têm seu próprio this