Executando verificação de segurança...
Em resposta a [Não disponível]
4

Complementando:


Parâmetros opcionais

No caso de parâmetro opcional, também daria para usar um valor default assim:

function saudacao(nome = 'visitante') {
    alert(nome);
}

Só fica um pouco complicado para vários parâmetros. Por exemplo, se todos são opcionais mas eu só quero mudar o segundo:

function saudacao(saudacao = 'Olá', nome = 'visitante') {
    alert(`${saudacao}, ${nome}`);
}

// assim ok, usa os valores default
saudacao(); // Olá, visitante

// se quiser mudar só o nome, não dá, pois o primeiro parâmetro sempre é a saudação
saudacao('fulano'); // fulano, visitante

// nesse caso, poderia fazer como vc sugeriu
function saudacao2(saudacao, nome) {
    saudacao ||= 'Olá';
    nome ||= 'visitante';
    alert(`${saudacao}, ${nome}`);
}

// Aí basta passar null para indicar que quero usar o valor default
saudacao2(null, 'fulano'); // Olá, fulano

Ou então usar desestruturação (que fica um pouco mais chato caso precise passar todos os parâmetros, ainda mais se tiver vários; só vale a pena se for mais frequente as chamadas mudando um ou outro):

function saudacao({ saudacao, nome }) {
    saudacao ||= 'Olá';
    nome ||= 'visitante';
    alert(`${saudacao}, ${nome}`);
}

// mudar somente o nome
saudacao({ nome: 'fulano'}); // Olá, fulano

Converter string HTML para elemento

Já para converter string HTML em um elemento, você pode usar o elemento template. A documentação diz que ele é um "mecanismo para conter HTML que não será renderizado imediatamente na página", ou seja, me parece mais adequado para o caso em questão (fica menos com cara de "gambiarra", na minha opinião):

function evalHTML(string) {
    let template = document.createElement("template");
    template.innerHTML = string;
    return template.content.children[0];
}

O retorno acaba sendo igual à sua função, mas acho que a semântica fica mais adequada, já que um elemento qualquer (a, div) poderia deixar ligeiramente mais confuso ("por que tá usando um link?", etc).


Iteráveis e for..of

Sobre iteráveis e for..of, vale lembrar que também se aplica a strings:

const texto = 'abc 123';
// itera pelos caracteres da string
for (const caractere of texto) {
    console.log(caractere);
}

Lembrando que isso pode dar diferença com o for tradicional, dependendo do conteúdo da string:

// sim, posso colocar um emoji direto no código
const texto = '💩';
// ou, se seu editor não suporta, pode trocar por
// const texto = String.fromCodePoint(0x1f4a9);

console.log('iterando com for..of');
for (const caractere of texto) {
    console.log(caractere);
}

console.log('iterando com for tradicional');
for (let i = 0; i < texto.length; i++) {
    console.log(texto[i]);
}

A saída é:

iterando com for..of
💩
iterando com for tradicional
�
�

Caso tenha ficado curioso, a explicação está aqui.


Iterar por objeto

Para iterar as chaves e valores de um objeto, também pode usar Object.entries, que já te dá as chaves e valores ao mesmo tempo:

let objeto = {
  'chave 1': 42,
  'chave 2': 3.14,
  'chave 3': 9.8,
}

for (const [chave, valor] of Object.entries(objeto)) {
    console.log(`${chave} = ${valor}`);
}

Saída:

chave 1 = 42
chave 2 = 3.14
chave 3 = 9.8
Carregando publicação patrocinada...
2

Vim para falar do default parameter e você já havia postado. Só complementando, ele tem 95% de compatibilidade, basicamente é aceito por todos os navegadores modernos nas versões mais atuais, só não há suporte para o Internet Explorer em nenhuma versão (não que eu ligue, rs).

Quando se usa um transpiler internamente ele substitui esse default parameter para evitar incompatibilidades.

0