对象和哈希之间的区别?

Lan*_*uhn 57 javascript json

在JavaScript中,对象和哈希之间有什么区别?你如何创造一个与另一个,你为什么要关心?以下代码示例之间是否有区别?

var kid = {
 name: "juni",
 age: 1
}
Run Code Online (Sandbox Code Playgroud)

和:

var kid = new Object();
kid.name = "juni";
kid.age = 1;
Run Code Online (Sandbox Code Playgroud)

和:

var kid = new Object();
kid["name"] = "juni";
kid["age"] = 1;
Run Code Online (Sandbox Code Playgroud)

你能想到我应该说明的任何其他代码示例吗?

这里核心问题对象和哈希之间的区别什么?

Mar*_*cin 57

没有任何东西.所有这三者在字面上都是平等的.

  • 至少不正确或过度简化.并不是说"他们之间没有区别"; 它们实际上都是一样的,所以差异的数量不是"0",而是"NaN". (18认同)
  • 然而......在这里http://stackoverflow.com/questions/8511281/check-if-a-variable-is-an-object-in-javascript他们表明各种`isObject`实现_could_给出不同的答案. (4认同)

Ian*_*ott 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
Run Code Online (Sandbox Code Playgroud)


Tim*_*own 6

在Java和C#等其他语言中,可以使用任何对象(不仅仅是字符串或数字)作为哈希表/哈希映射中的键,而JavaScript中不是这种情况:键只是转换为字符串.

var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"
Run Code Online (Sandbox Code Playgroud)

使用任意对象作为键可能很有用,在这种情况下,您可以使用类似jshashtable的东西.

免责声明:我写了jshashtable.


The*_*evs 5

实际上,JavaScript中的每个对象都是一个哈希。这是对象的属性和方法的哈希。实际上,Javascript中的所有内容都是哈希(即名称/值对的列表)。

每次调用对象的方法,属性或仅引用任何变量时,都将执行内部哈希查找。