JavaScript object literals syntax error

The NodeJS REPL evaluates code as an expression, by wrapping the code in parentheses, causing {"hello":1} to be ({"hello":1}) which is parsed successfully as an object literal.

Usually and elsewhere (in Chrome/Firefox's console), the curly braces are parsed as the delimiters of a block, like:

/*imagine if (true) */ {
    "hello": 1 // <-- What's this syntax? It's meaningless.
}

{hello:1} parses successfully, because hello in this context has the meaning of a label:

/*imagine if (true) */ {
    hello: 1;
} //        ^-- Automatic Semicolon Insertion

The first example is not an object literal, it is a block. Blocks contain statements. The squence String literal, colon, Number literal is not a valid statement.

The second example is an object literal.

The third example is also a block, but you have replaced the string literal and colon with a label (which is allowed, but is pointless as there is no loop).

Context is important in JavaScript.