Aguarde...

31 de agosto de 2024

O único recurso JavaScript amplamente reconhecido já foi descontinuado

O único recurso JavaScript amplamente reconhecido já foi descontinuado

Descontinuar recursos em JavaScript é raro. Apenas um recurso na história da linguagem foi oficialmente descontinuado: declarações ‘with’ .

A declaração ‘with’ foi introduzida no início da história do JavaScript. Seu propósito era simplificar o trabalho com objetos fornecendo um atalho para acessar propriedades de objetos.

const car = {
  make: 'Toyota',
  model: 'Corolla',
  year: 2020
};

with (car) {
  console.log(make);   // Toyota
  console.log(model);  // Corolla
  console.log(year);   // 2020
}

A instrução ‘with’ permite que você acesse as propriedades do objeto car diretamente, sem precisar digitar car.make , car.model e car.year .

Por que o Was with foi descontinuado?

O problema principal era a ambiguidade. Como a declaração with modifica o escopo, ficou difícil para os desenvolvedores e mecanismos JavaScript saberem a quais variáveis ​​ou propriedades estavam sendo referenciadas.

O que esse código imprimirá?
const car = {
  make: 'Toyota'
};

function showMake() {
  const make = 'Honda';
  with (car) {
    console.log(make);
  }
}

showMake();

Ele imprimirá ‘Toyota’ do objeto car, ou ‘Honda’ do escopo da função showMake ? A ambiguidade aqui é o problema. Isso poderia facilmente levar a bugs difíceis de rastrear.

A resposta: ‘Toyota’

A instrução with estende a cadeia de escopo, então quando with (car) é usado, ela efetivamente coloca as propriedades do objeto car no escopo.

Na função showMake , quando console.log(make) é chamado dentro do bloco with (car), o JavaScript primeiro procura por make dentro do objeto car. Como car tem uma propriedade make com o valor ‘Toyota’, ele a encontra primeiro e imprime ‘Toyota’.

Se o objeto car não tivesse uma propriedade make, o JavaScript procuraria por make no escopo ao redor, onde encontraria o valor ‘Honda’. Mas, neste caso, como car tem uma propriedade make, ‘Toyota’ é impresso.

Onde estamos hoje (2024)

A declaração with ainda faz parte do JavaScript hoje, mas é considerada uma prática ruim. Pode causar comportamento confuso e imprevisível.

Isso acontece porque ele altera a cadeia de escopo, dificultando dizer quais variáveis ​​estão sendo usadas. Essa ambiguidade pode levar a bugs difíceis de encontrar.

Por esses motivos, é melhor evitar usar with no seu código.

Como evitar usar com

Em vez de usar with , você deve referenciar propriedades de objeto diretamente. Se estiver tentando encurtar a sintaxe, considere usar destructuring:

const car = {
  make: 'Toyota',
  model: 'Corolla',
  year: 2020
};

// Destructuring assignment
const { make, model, year } = car;

console.log(make);   // Toyota
console.log(model);  // Corolla
console.log(year);   // 2020

Este código atinge um efeito similar à declaração ‘with’, mas sem as armadilhas. A desestruturação é clara, inequívoca e amplamente suportada em JavaScript.

A instrução ‘with’ é frequentemente citada como o único recurso obsoleto em JavaScript, mas isso não é totalmente verdade.

Embora seja um dos recursos obsoletos mais proeminentes e conhecidos, ele não está sozinho. Outros recursos, como arguments.callee no modo estrito e certos usos de eval() , também enfrentaram depreciação ou forte desencorajamento.

Postado em BlogTags:
Escreva um comentário