在JavaScript中,对象和哈希之间有什么区别?你如何创造一个与另一个,你为什么要关心?以下代码示例之间是否有区别?
var kid = {
name: "juni",
age: 1
}
和
var kid = new Object();
kid.name = "juni";
kid.age = 1;
和
var kid = new Object();
kid["name"] = "juni";
kid["age"] = 1;
你能想到我应该说明的任何其他代码示例吗?
这里的核心问题是对象和哈希之间有什么区别?
答案 0 :(得分:55)
没有。所有这三者在字面上都是平等的。
答案 1 :(得分:18)
它们是可以互换使用的不同符号系统。在许多情况下,使用括号语法[ ]
可能更具吸引力,例如在引用带变量的对象时。
var temp = "kid";
var obj = new Object();
obj[temp] = 5; // this is legal, and is equivalent to object.kid
obj.temp = 5; // this references literally, object.temp
答案 2 :(得分:6)
在Java和C#等其他语言中,可以使用任何对象(不仅仅是字符串或数字)作为哈希表/哈希映射中的键,而JavaScript中不是这种情况:键只是转换为字符串。
var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"
将任意对象用作键是很有用的,在这种情况下,您可以使用jshashtable之类的东西。
免责声明:我写过jshashtable。
答案 3 :(得分:4)
您的任何样品都没有任何差异。它们都是具有命名属性的对象。您刚刚展示了创建/引用这些属性的不同方法。
答案 4 :(得分:4)
实际上,JavaScript中的每个对象都是哈希。这是对象属性和方法的哈希。事实上,Javascript中的所有内容都是一个哈希值(即名称/值对列表)。
每次调用object的方法,属性或只引用任何变量时,都会执行内部哈希查找。
答案 5 :(得分:3)
他们是一样的。
你可以互换使用它们。
答案 6 :(得分:3)
我认为这是完全一样的。第三个版本可以与动态属性名称一起使用。第一个是最短的写作。
答案 7 :(得分:2)
他们是一样的。就像[]
和new Array()
一样。
有关核心类型JavaScript的更多信息,请查看MDC Core JavaScript 1.5 reference。
如果您需要{}
与new Object()
相同的证据:
Object.prototype.helloWorld = function () { alert('Foo!'); };
var a = new Object();
var b = {};
a.helloWorld();
b.helloWorld();
<强> !!!警告ACHTUNG AVERTISSEMENT !!! 永远不要在生产代码中分配prototype
类型的Object
属性。你将污染整个全局命名空间。
答案 8 :(得分:1)
从技术上讲,它们是一样的。当您编写代码时,您可以轻松地执行myobject['someproprty' + 'somethingElseConcatenated]
,这在使用“点符号”时无法执行 - myobject.someproperty
就是您所能做的。
var a = new Object()
语法,因为某些原因我没有抓到。无论如何,如果你对它感兴趣,它值得观看他的演示文稿(它由几部分组成,第一部分在这里http://video.yahoo.com/watch/111593/1710507)
答案 9 :(得分:1)
每个引擎(浏览器)都以不同的方式实现它,但让我们专注于chrome的V8(基于我在一年前在大多数现代浏览器上执行的性能测试,如果你遵循v8 guidlines,它们会提供相似的性能提升)。 / p>
它基本上发生的是:
请看这个链接: https://developers.google.com/v8/design#prop_access
www.quora.com/Are-JavaScript-Objects-implemented-as-HashTables-Is-key-value-access-O-1
jayconrod.com/posts/52/a-tour-of-v8-object-representation
也是一个非常好的讲座: https://www.youtube.com/watch?v=UJPdhx5zTaw
希望它有所帮助...
答案 10 :(得分:0)
实际上,JavaScript中没有任何名为“hashtable”或“hashmap”的东西。 JavaScript中的对象表现得像'hash'[JavaScript中的对象只是键/值属性],因而混乱。