2013-06-25 62 views
9

下面的代碼生成一個語法錯誤在Chrome和Firefox,但不是Node.js的:JavaScript對象文字語法錯誤

{"hello": 1} 

但是,下面的代碼工作無處不在:

var x = {"hello": 1} 

而且,以下作品無處不在:

{hello: 1} 

這種奇怪行爲的解釋是什麼?

+0

嘗試移除 「」 從鍵等中使用{你好:1},在JavaScript的鍵不是必要之間 「」(報價)。 – Anshul

回答

11

NodeJS REPL evaluates code as an expression,通過將代碼包裝在圓括號中,導致{"hello":1}({"hello":1}),它被成功解析爲對象文字。

通常和其他地方(在Chrome/Firefox中的控制檯),大括號被解析爲一個塊的分隔符,如:

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

{hello:1}成功解析,因爲hello在這方面具有的意義label

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

第一個示例不是對象字面量,它是block。塊包含語句。序號字符串字面值,冒號,數字文字不是有效的語句。

第二個例子是一個對象文字。

第三個例子也是一個塊,但是你用label(這是允許的,但沒有任何循環沒有意義)代替了字符串文字和冒號。

上下文在JavaScript中很重要。