Last active
March 16, 2018 21:23
-
-
Save leobalter/e7f2fe51263b83a91b7f3e5cdf3ea05a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Qual o resultado para: | |
// 1: | |
{}+{} // ? | |
// 2: | |
({}+{}) // ? |
> {}+{}
NaN
> ({}+{})
"[object Object][object Object]"
é o comportamento válido, de acordo com a especificação. O problema de verificar esse código no console do browser é que ele encapsula o código e o {}
pode ser interpretado em posição de expressão, não de statement. Fazendo o valor sair diferente em alguns browsers. O mesmo acontece no node.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@felipenmoura então é provável que isso seja um comportamento do V8?
Fiz um teste aqui, acho que o Chrome/Chromium e o Node não tratam esses blocos vazios. Parece que eles consideram objetos mesmo, isso no console.
Se você tentar rodar
{ foo: 1, bar: 2 }
nesses ambientes, eles retornam um objeto mesmo, já no Firefox, ele tenta executar esse código como um bloco, mas dá erro por causa da falta do;
.Acredito que a questão é mesmo o V8 permitir esses objetos no contexto do console, uma vez que um arquivo block.js com o conteúdo
{ foo: 1, bar: 2 }
, também dá erro quando executado comnode block.js