Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Retorno inesperado!

Quando utilizamos o push deste forma o retorno e o length do array e não o array em si, por quê isso ocorre?

console.log(    lista1.push(...lista2) );
8 respostas

Olá Rodigo fiz um teste com o exemplo que vc deixou em cima e não tive nem um problema. Segue o código que eu fiz

let arrayA = ['a','b'];
let arrayClone = [];

arrayClone.push(...arrayA);

console.log(arrayClone);

A questão é quando fazemos assim:

console.log(arrayClone.push(...arrayA));

O retorno vai ser "2", tente ai! Se você fizer depois do seu exemplo o retorno vai ser 4

Entendi Rodrigo. O método Array.prototype.push() sempre retorna seu novo length. Note que no começo ele é 0 e quando vc dá um push nele ele retorna 2 que é a quantidade no array A e se vc fizer de novo ele vai retornar 4 assim como vc mesmo disse.

Complementando a resposta do Alan: da uma olhada aqui no W3C. Você poderá ler toda a definição do método push().

solução!

Rodrigo, na documentação do método push o retorno é a posição, nunca foi o array em si. Em nenhum momento no curso digo que push retorna um novo array.

Parece que isso foi uma surpresa para você, mas não se preocupe. Tudo isso esta documentado na W3C.

Sucesso e bom estudo!

Sim minha surpresa foi que a mesma sintax utilizada em situações distintas retorna resultados diferentes, a ideia era deixar o código menos verboso como diria o Flávio, mas o resultado foi diferente. Mas ok esta entendido!

Eu gosto sempre de escrever menos. Mas confesso que seria lindo se o push retornasse uma nova lista! :)

Aliás, quando você chegar no terceiro módulo, aprenderá fazer monkey patching e pode usar o que vai aprender para mudar o comportamento de push. Não é uma boa prática fazer isso, mas com javaScript temos o poder de mudar tudo!

Feliz 2017!!!!!!!

Segue um gostinho de como conseguimos mudar o comportamento de qualquer função em JavaScript:

Array.prototype.push=(() => {
    var original = Array.prototype.push;
    return function() {

        original.apply(this,arguments);
        return this;
    };
})();

x = ['a', 'b', 'c'];

let retorno = x.push('d');
alert(retorno); // imprime a, b, c, d

JavaScript é coisa de cangaceiro!