我有點失落,爲什麼下面的代碼做它做的事情。JavaScript語法瘋狂 - 任何人都知道爲什麼發生這種情況
對於下面的表達式,我期望1作爲結果,因爲在文字的右側我們實際上有一個obj。
表達:
> { a : 1 }.a
結果鉻:
Syntax error: Unexpect token .
結果的NodeJS
1
(另一個問題是:爲什麼的NodeJS和鉻的不同在此(和在下面))
雖然表達式本身有語法錯誤,但將其分配給變量仍然有效。
> var x = { a : 1 }.a; x;
結果:
1
現在使用表達式附近的EVAL不使用eval在Chrome和的NodeJS
> eval({ a : 1 }.a)
結果Chrome的工作和節點
1
現在和基於字符串的expr分裂國家既不平臺的工作原理
的eval( 「{A:1} .A」)
結果鉻:
SyntaxError: Unexpected token >
結果的NodeJS:
... //REPL waits more code
最後括號解決了這一切,但爲什麼?
> eval("({ a : 1 }.a)")
結果:
Works everywhere
嘗試只是一個家長的對象(無EVAL) :'({a:2} .a)'// 2 – karim79 2013-04-04 11:30:06
是的。實際上,eval幾乎表現爲一個常規函數,它在參數中提供了一個表達式上下文(根據下面的正確答案) – 2013-04-04 11:32:27
@PeterAronZentai'eval'代碼總是在語句上下文中運行,這就是爲什麼您需要'eval(「(」 + code +「)」)'在表達式上下文中運行代碼。例如,如果'code'是'「{a:1}」',那麼由於括號的連接,將被排除的是「{(a:1})」。 – Esailija 2013-04-04 11:37:22