1:{key:value}["key"]
2:({key:value})["key"]
我想知道的JS解釋器是如何工作的在上面的代碼,爲什麼不起作用,爲什麼作品?爲什麼{key:value} [「key」]不起作用?
回答
我假設你問這個問題是因爲你在JavaScript REPL(shell)中看到了這個效果。您正在使用一個JavaScript shell,它假設前導「{」開始一個塊語句而不是對象字面值。
例如,如果您使用的是自帶的Chrome瀏覽器的JavaScript解釋器,你看到以下內容:
> {key:"value"}["key"]
["key"]
這裏,瀏覽器看到了您輸入的語句塊,緊接着就是爲表達一個元素的數組,字符串爲"key"
。所以它迴應了該表達式的結果,即陣列["key"]
但並非所有的炮彈都以這種方式工作。如果您使用node.js解釋器,那麼#1 將爲您工作!
$ node
> {key:"value"}["key"]
'value'
>
在Chrome等口譯員,你必須使用括號來告訴它你想要的第一部分是一個對象字面量。 (順便說一下,這種技術保證在全部炮彈,包括節點的工作)。
編輯
作爲一個評論指出的那樣,如果你使用的是在表達方面的任何地方在實際的腳本構建,它會產生"value"
。它在外殼中的使用看起來很混亂。
這個事實實際上是在Gary Bernhardt着名的WAT video中被利用的。
號碼2也將工作在節點 – aaronman 2013-05-07 02:55:35
#1在瀏覽器也能正常工作,只是不在eval上下文(控制檯)。 http://jsfiddle.net/qpnMw/ – 2013-05-07 02:56:50
是的。這值得添加答案。 – 2013-05-07 02:58:29
- 1. :不起作用,爲什麼?
- 2. 爲什麼不工作KeyDown CTRL + KEY?
- 3. UIBarButtonItem操作不起作用。爲什麼?
- 4. 這個jquery爲什麼不起作用?
- 5. 爲什麼「Time.now.at_beginning_of_day」不起作用?
- 6. 爲什麼SubmitChanges不起作用?
- 7. 爲什麼click()函數不起作用?
- 8. 爲什麼C#XDocument.Descendants()不起作用?
- 9. 爲什麼PermissionAndroid不起作用?
- 10. 爲什麼onload事件不起作用?
- 11. 爲什麼DataAnnotation MaxLength(8192)不起作用?
- 12. 爲什麼mysql real_escape_string vsprintf不起作用
- 13. 命令爲什麼不起作用
- 14. 爲什麼確認框不起作用?
- 15. 爲什麼COUNT(DISTINCT(*))不起作用?
- 16. GetdataBy日期不起作用爲什麼?
- 17. 爲什麼WScript不起作用?
- 18. 爲什麼capistrano multiconfig不起作用?
- 19. 這個DMAX爲什麼不起作用?
- 20. 爲什麼EventWaitHandle不起作用?
- 21. 爲什麼[self.tableView reloadData]不起作用?
- 22. 爲什麼'Get from model'不起作用?
- 23. 浮動爲什麼不起作用?
- 24. 爲什麼.htaccess不起作用?
- 25. 更新row_number()不起作用,爲什麼?
- 26. 爲什麼Ansi_nulls不起作用?
- 27. 爲什麼GPS定位不起作用?
- 28. 爲什麼moment.js減法不起作用?
- 29. 爲什麼log4javascript.trace方法不起作用?
- 30. 爲什麼pinterest feed不起作用?
因爲這就是語法的定義方式。 – Phrogz 2013-05-07 02:53:05
根據解釋器的不同,可能會接受一些非標準代碼,或者可能會有一些不符合標準的舊實現。我認爲它們必須出於同樣的原因,當人們將函數放在paranthesis中時(function(){alert(「東西「);})() – Zelenova 2013-05-07 02:58:53