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. Java Key Listener不起作用
- 4. UIBarButtonItem操作不起作用。爲什麼?
- 5. cron作業不起作用。爲什麼?
- 6. 爲什麼servername:port不起作用爲什麼node.js中的localhost:port起作用?
- 7. 爲什麼Request.QueryString [「key」]停止工作?
- 8. 爲什麼子鏈接不起作用?
- 9. 爲什麼AJAX呼叫不起作用?
- 10. 爲什麼isalpha()不起作用?
- 11. 爲什麼@autoreleasepool不起作用
- 12. 爲什麼ng-show不起作用?
- 13. 信號量爲什麼不起作用?
- 14. 爲什麼FirstpersonVrControls不起作用?
- 15. 爲什麼GLSL const bool不起作用?
- 16. 更新row_number()不起作用,爲什麼?
- 17. 爲什麼SSKeychain不起作用?
- 18. 爲什麼Ansi_nulls不起作用?
- 19. 爲什麼UIKit Dynamics不起作用?
- 20. 爲什麼DateTime.AddHours似乎不起作用?
- 21. 爲什麼滾動條不起作用?
- 22. 爲什麼querySelectorAll()和getElementsByTagName()不起作用?
- 23. ActionBar V7:爲什麼它不起作用?
- 24. 爲什麼Firebase「.indexOn」不起作用?
- 25. 爲什麼onkeypress不起作用?
- 26. 爲什麼css轉換不起作用?
- 27. 爲什麼方法不起作用?
- 28. 爲什麼awk算術不起作用?
- 29. 爲什麼PermissionAndroid不起作用?
- 30. 爲什麼animationDidStart:不起作用?
因爲這就是語法的定義方式。 – Phrogz 2013-05-07 02:53:05
根據解釋器的不同,可能會接受一些非標準代碼,或者可能會有一些不符合標準的舊實現。我認爲它們必須出於同樣的原因,當人們將函數放在paranthesis中時(function(){alert(「東西「);})() – Zelenova 2013-05-07 02:58:53