Skip to content

Instantly share code, notes, and snippets.

@leobalter
Last active March 16, 2018 21:23
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leobalter/e7f2fe51263b83a91b7f3e5cdf3ea05a to your computer and use it in GitHub Desktop.
Save leobalter/e7f2fe51263b83a91b7f3e5cdf3ea05a to your computer and use it in GitHub Desktop.
Qual o resultado para:
// 1:
{}+{} // ?
// 2:
({}+{}) // ?
@gabsprates
Copy link

@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 com node block.js

@leobalter
Copy link
Author

> {}+{}
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