javascript - 用于访问嵌套数组中元素的 Javascript 点和括号与 python 括号表示法?
问题描述
我想知道为什么用于访问嵌套在字典中的列表中的元素的 Python 语法在 JavaScript 中不起作用。
例如,如果我们有myStorage
字典/对象。我想访问元素"maps"
。
var myStorage = {
"car": {
"inside": {
"glove box": "maps",
"passenger seat": "crumbs"
},
"outside": {
"trunk": "jack"
}
}
};
为什么下面的 Python 样式命令即使在 Python 中也能在 JavaScript 中工作?
myStorage["car"["inside"["glove box"]]];
但是 javascript 中的点和括号表示法有效。
myStorage.car.inside["glove box"];
解决方案
正如评论中提到的,这是两种不同的语言。C 与 C++ 的语法在某些方面也很相似,但如果您不知道它在后台做什么,它的行为会有所不同。其他语言也一样。语法只是程序员遵循的一组规则,因此“机器”无论是 VM(字节或不同)、编译器还是直接 CPU 都可以以某种方式使用它。
如果你从最底层的部分开始抽象,即 CPU 指令,你会得到低级语言到高级/高级/脚本,并通过各种抽象,即使语法可能相似甚至相同(Python / Ruby / Haskell)使用代码的引擎会表现不同。如果您想同时在 Python 和 JS 中编写代码,那么学习语法只是其中一个步骤。
Python 中的 dot-access 用于getattr()
后台,如果缺少此类属性,您将得到一个AttributeError
提升。没有要返回的预定义值,因为 Python 会强制程序员在重要的情况下明确表示。
另一方面,对于 JavaScript,如果缺少该属性,则有一个默认值,即您不会收到错误,而是默认的undefined
.
然而,当使用 Python 的__dict__
属性 ( thing.__dict__[key]
) 或vars(object)[key]
. 这样,您可以更接近 JS 规则,例如:vars(object).get(key, None)
,但是某些对象没有__dict__
(例如 C/C++/Cython 扩展时这样编写),因此在这种情况下,您还需要检查__slots__
属性:
def js_access(obj, key, default=None):
if hasattr(obj, "__dict__"):
return getattr(obj, key, default)
elif hasattr(obj, "__slots__"):
...
elif <other cases>:
...
相同/相似的语法,不同的执行规则。
推荐阅读
- python - 用子进程和线程中断python程序的正确方法
- security - 如何防止隐藏输入的变化?
- spacy - 带有 '\n' 的空白标记如何影响 spaCy 的 CNN?
- python - 如何在特定位置绘制坐标轴?
- javascript - Phonegap camera.getPicture imageURI only temp in Cache folder,我怎样才能得到永久的imageSRC
- bash - Bash 日期大小写不正确
- python - 在 Python BeautifulSoup 中查找 div 类的父属性
- java - 在填充有其他面板的卡片布局顶部显示一个 JPanel
- java - 你如何检查用户是否点击了一些不同的按钮?
- freecad - 将草图粘贴/复制到绘图上