Python字典和Javascript对象之间有什么区别?

Python字典和Javascript对象之间有什么区别?,javascript,python,object,dictionary,Javascript,Python,Object,Dictionary,我是python新手,我在读字典。从我以前使用javascript等语言的经验来看,它们对我来说就像是对象。字典可以存储列表,并与javascript中的对象共享许多相似之处 前python代码: menu = {} menu['Chicken Alfredo'] = 14.50 menu['Italian Pasta'] = 15.89 menu['Shrimp Soup'] = 12.43 menu['Persian Rice'] = 21.99 ex javascript代码: var

我是python新手,我在读字典。从我以前使用javascript等语言的经验来看,它们对我来说就像是对象。字典可以存储列表,并与javascript中的对象共享许多相似之处

前python代码:

menu = {}
menu['Chicken Alfredo'] = 14.50
menu['Italian Pasta'] = 15.89
menu['Shrimp Soup'] = 12.43
menu['Persian Rice'] = 21.99
ex javascript代码:

var menu = new Object();
menu['Chicken Alfredo'] = 14.50;
menu['Italian Pasta'] = 15.89;
menu['Shrimp Soup'] = 12.43;
menu['Persian Rice'] = 21.99;
这里的区别是什么,他们都做相同的工作,但有不同的概念?

在Python中,字典是映射类型的一种形式。他们可能是 使用逗号分隔的名称:值对序列初始化, 用大括号括起来的。它们是使用数组表示法访问的 包括方括号。密钥可以是任何可散列的,包括 数字和字符串

在Javascript中,字典与对象相同。可能是 使用与Python相同的语法初始化。钥匙可以是一个数字, 字符串或标识符。因为字典也是一个对象, 可以使用数组表示法访问元素,例如b[i], 或使用属性符号,例如b.i


考虑初始值设定项中使用的标识符,例如

 b = {i:j} 
 b = {i:j} 
在Python中,i和j都被计算,但在Javascript中,只有j被计算。在Javascript中,您还可以使用 使用标识符i以点表示法写入的权限。 因此在Python中

 i='k'
 j=1
 b = {i:j}
 b['k'] # -> 1 
 i='k'
 j=1
 b = {i:j}
 b['k'] # -> 1 
在Javascript中

 i='k'
 j=1
 b = {i:j}
 b['i'] // -> 1
 b.i // -> 1
 // b[i], b['k'] and b.k are not defined 
 i='k'
 j=1
 b = {i:j}
 b['i'] // -> 1
 b.i // -> 1
 // b[i], b['k'] and b.k are not defined 
在Javascript中,使用点表示法中的标识符在所有情况下与 使用“看起来像”数组表示法中的标识符的字符串。 因此,, b={'i':1}; b['i']/->1 b、 i/->1当在字典中使用数字或布尔值时,Javascript将使用 数字或布尔值。Python中并非如此——字符串和数字(或 布尔值)是不同的哈希表

如果你对两种语言之间的差异感兴趣,那么看看

  • Python字典中的键必须是可散列的(例如字符串、数字、浮点),而JavaScript没有这样的要求

  • 以下是JavaScript中的有效对象:

  • constJavaScriptObject={name:'Alexander Pushkin',年份:1799}
    
    但是,它作为Python字典是无效的:

    python_dictionary={name:'Alexander Pushkin',年份:1799}
    #导致名称错误:未定义名称“name”
    
    快速修复方法是将Python字典的键转换为字符串:

    my_dictionary={'name':'Alexander Pushkin','year':1799}
    
    考虑初始值设定项中使用的标识符,例如

     b = {i:j} 
    
     b = {i:j} 
    
    在Python中,i和j都被计算,但在Javascript中,只有j被计算。在Javascript中,您还可以使用标识符i编写点表示法。因此在Python中

     i='k'
     j=1
     b = {i:j}
     b['k'] # -> 1 
    
     i='k'
     j=1
     b = {i:j}
     b['k'] # -> 1 
    
    在Javascript中

     i='k'
     j=1
     b = {i:j}
     b['i'] // -> 1
     b.i // -> 1
     // b[i], b['k'] and b.k are not defined 
    
     i='k'
     j=1
     b = {i:j}
     b['i'] // -> 1
     b.i // -> 1
     // b[i], b['k'] and b.k are not defined 
    
    在Javascript中,在所有情况下,在点表示法中使用标识符与在数组表示法中使用“看起来像”标识符的字符串完全相同。因此,b={'i':1};b['i']/->1 b.i/->1当在字典中使用数字或布尔值时,Javascript将使用数字或布尔值的字符串表示形式访问元素。在Python中并非如此——字符串和数字(或布尔值)是不同的哈希表

    但是,

    //b[i] will be valid in this case of javascrip code
    b = {}
    var i = 'k';
    b[i] = 2
    console.log(b); // -> {'k':2}
    //thus b[i] = b['k'] = 2
    

    因此,尽管存在差异,但python中dictionary的所有应用程序都可以由javascript中的对象执行,反之亦然。

    python代码也是js…javascript允许使用
    menu.chicken
    作为
    menu['chicken']
    (IIRC)的别名,但python不允许这样做。此外,如果请求的项不存在,python字典将引发一个
    KeyError
    。Javascript将返回
    未定义的
    (同样,IIRC)..@dandavis它们在语法上是相同的,但字典的行为可能不同于JS对象在python dict中,您可以使用任何不可变类型作为键(string、int、tuple、frozenset等),但在JS对象中,所有键都转换为字符串。因此,
    menu['1']
    menu[1]
    在js中是一样的,但在Python dicts中不是这样。顺便说一句,有一个Python包为字典提供属性样式访问。它允许诸如
    menu.chicken
    menu.chicken=1
    等操作。Python中不存在
    ->
    操作符(第二块代码)@Jacquot他只是说
    b['k']
    将是
    1
    @tisaconundrum的值是的,我知道,
    ->1
    自从我发表评论以来就被注释掉了;我想当时我只是挑三拣四,对于那些需要复制粘贴代码以查看其输出的人来说