Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么允许在字典中重新定义键_Javascript_Python_Json_Dictionary_Literals - Fatal编程技术网

Javascript 为什么允许在字典中重新定义键

Javascript 为什么允许在字典中重新定义键,javascript,python,json,dictionary,literals,Javascript,Python,Json,Dictionary,Literals,在Python、Javascript、JSON(可能还有其他语言)中,您可以在字典文本中重新定义键,如下所示: { "foo" : 1, "foo" : 2 } 这似乎会导致不可预测的结果,我无法想象为什么一个人会故意这么做。有什么好的理由允许这样做吗?这不会导致无法预测的结果。最后一个关键点将在对象中具有其值 var o = { "foo" : 1, "foo" : 2 }; 与以下内容基本相同: var o = {}; o["foo"] = 1; o["foo"] = 2; // ove

在Python、Javascript、JSON(可能还有其他语言)中,您可以在字典文本中重新定义键,如下所示:

{ "foo" : 1, "foo" : 2 }

这似乎会导致不可预测的结果,我无法想象为什么一个人会故意这么做。有什么好的理由允许这样做吗?

这不会导致无法预测的结果。最后一个关键点将在对象中具有其值

var o = { "foo" : 1, "foo" : 2 };
与以下内容基本相同:

var o = {};
o["foo"] = 1;
o["foo"] = 2; // overrides the previous ones
// o == {"foo": 2}

Javascript对象本质上映射到关联数组,该数组具有添加、删除和重新分配键值存储的功能


如果一个对象能够重新分配一个值,为什么它会阻止您这样做呢?在Javascript中定义对象有很多不同的方法,我认为基于语法限制操作的开销是不合理的,并且提供的价值很小(IMO no)

也许是因为字典正在创建过程中,所以查找每一个看到的键,看看它是否已经存在,会使事情变得太慢。简单性和一致性。通常允许更改键/值,对于文本,顺序定义良好。它使我们能够更轻松自然地编写代码,从不同的来源生成JSON。可能有很好的理由,但也许您应该重新表述您的问题,即检测重复是否可能或需要,以及在这种情况下抛出何种错误才有意义。例如,这可能超出了CF语法(解析器)的范围,正如其他人所说,您必须构建一个哈希表来检测重复项,所以这不是为你做的。也就是因为你想不出一个人为什么会这样做,并不意味着其他人想不出一种有用的方法来生成这样工作的JavaScript或JSON代码,以利用这种方法,例如,在发生更改时序列化更改系统的状态,然后解析并运行JSON,并在将来的某个时候返回最新状态。@speedplane字典的内容在一系列有序的插入操作之后定义得非常好。很直观的是,插入的内容是按照文字的顺序执行的,我不认为这两者是一样的。关联数组的键是无序的,因此不清楚发生了什么。第二个是非常明显的。@speedplane当解释器解析时(从左到右),我认为它会在解释键值对时分配键值对,所以这两个键值对几乎是一样的!这取决于您对解释器如何解析代码的理解,从语言的角度来看,这没有多大意义。@speedplane:the指定键/数据对“从左到右求值以定义字典的条目”,因此这两个代码段几乎完成了相同的任务。我仍然不认为这真的是对你的问题的回答,然而,只有对不可预测行为的断言。@ Simult:映射中键的顺序是不相关的。我们从一个文本文字讨论一个的构建,这个文本文字肯定有一个顺序。我对这次谈话感到厌倦了,让我们结束吧,