Cuidado com esse código no Javascript

magoacademico

Mago Acadêmico

Posted on May 1, 2022

Cuidado com esse código no Javascript

Cuidado com labels em javascript

Você sabe qual é o problema nesse código?

[1, 2, 3].map(x => {id: x})
Enter fullscreen mode Exit fullscreen mode

Se você executar esse código, você verá que não terá nenhum erro, mas retornará um array de elementos undefined ao invés de retornar um array de objetos com a propriedade id.

Porque isso acontece? Primeiramente é importante entender como arrumar esse código.

Para retornar um objeto diretamente de uma arrow function é necessário utilizar () envolta do objeto, da seguinte forma:

// ❌ 
[1, 2, 3].map(x =>   {id: x}   ) // => [undefined, undefined, undefined]

// ✅ 
[1, 2, 3].map(x => ( {id: x} ) ) // => [{id: 1}, {id: 2}, {id: 3}]
Enter fullscreen mode Exit fullscreen mode

Outra forma seria utilizar return

[1, 2, 3].map(x => {
    return {id: x} 
}) 
Enter fullscreen mode Exit fullscreen mode

Então o que seria esse x => {id: x} ?

Na verdade, esse código deve ser visto da seguinte forma

[1, 2, 3].map(x => {
    id: x
})
Enter fullscreen mode Exit fullscreen mode

E o que ele realmente representa é a utilização de um labeled statement ou também conhecido como label no Javascript.

Um label serve como um identificador para depois ser utilizador por um break ou um continue. Um exemplo seria quando se tem mais de um for loop dentro do outro e você deseja dar um break ou continue em um loop fora do escopo em que o código se encontra, ou seja, você está no loop de dentro, mas deseja dar um break no loop de fora.

loop1: for(let i = 0; i < 10; i++) { // loop de fora
    loop2: for(let i = 0; i < 10; i++) { // loop de dentro
        if(condition1) {
            break; // sai do loop2
        }
        if(condition2) {
            break loop2; // sai do loop2, igual a usar somente "break;"
        }
        if(condition3) {
            break loop1; // sai do loop1
        }
        if(condition4) {
            // labels tambem podem ser usados com "cotinue"
            continue loop1; // continua o loop1
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Um label pode ser atribuído para qualquer variável, até mesmo for , while e escopos como label: { /* codigo javascript */ } e é dai que surge o erro no código.

Portanto, fique atento ao retornar objetos diretamente em uma arrow function para não cair no perigo de utilizar um label statement de maneira indesejada.

💖 💪 🙅 🚩
magoacademico
Mago Acadêmico

Posted on May 1, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related