Javascript 对象和散列之间的区别?
在JavaScript中,对象和散列之间的区别是什么?你如何创造一个与另一个,为什么你会在意?以下代码示例之间是否存在差异Javascript 对象和散列之间的区别?,javascript,json,Javascript,Json,在JavaScript中,对象和散列之间的区别是什么?你如何创造一个与另一个,为什么你会在意?以下代码示例之间是否存在差异 var kid = { name: "juni", age: 1 } 以及: 以及: 你能想到我应该说明的其他代码示例吗 这里的核心问题是对象和散列之间的区别是什么?它们是相同的 你可以互换使用它们。根本没有。这三种情况实际上是相等的。您的任何样品都没有任何差异。它们都是具有命名属性的对象。您刚刚展示了创建/引用这些属性的不同方法。我认为这是一样的。第三个版本可以与动
var kid = {
name: "juni",
age: 1
}
以及:
以及:
你能想到我应该说明的其他代码示例吗
这里的核心问题是对象和散列之间的区别是什么?它们是相同的
你可以互换使用它们。根本没有。这三种情况实际上是相等的。您的任何样品都没有任何差异。它们都是具有命名属性的对象。您刚刚展示了创建/引用这些属性的不同方法。我认为这是一样的。第三个版本可以与动态属性名一起使用。第一种是最短的书写方式。它们是不同的符号系统,可以互换使用。在许多情况下,使用括号语法
[]
更具吸引力,例如使用变量引用对象时
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
它们是一样的。正如
[]
和新数组()
一样
有关JavaScript核心类型的更多信息,请查看
如果您想证明{}
与新对象()相同
:
!!!警告:避免决不在生产代码中为
对象
类型的原型
属性赋值。您将污染整个全局名称空间。实际上,JavaScript中没有所谓的“hashtable”或“hashmap”。JavaScript中的对象的行为类似于“散列”[JavaScript中的对象只是键/值属性],因此存在混淆 实际上,JavaScript中的每个对象都是散列。这是对象属性和方法的散列。事实上,Javascript中的所有内容都是散列(即名称/值对列表)
每次调用对象的方法、属性或只是引用任何变量时,都会执行内部哈希查找。在Java和C等其他语言中,可以使用任何对象(不仅仅是字符串或数字)作为哈希表/哈希映射中的键,而JavaScript中没有这种情况:键只是转换为字符串
var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"
使用任意对象作为键可能很有用,在这种情况下,您可以使用以下内容
免责声明:我编写了jshashtable。从技术上讲,它们是相同的。编写代码时,您可以轻松地执行
myobject['someproperty'+'somethingelscanneted]
,这是使用“点表示法”-myobject时无法执行的。someproperty
是您所能做的一切
ECMAscript的一位自动作者Douglas Crockford建议不要使用var a=new Object()
语法,原因是我没有完全理解。无论如何,如果你对他的演示感兴趣,那就值得一看(它由几个部分组成,第一部分在这里)每个引擎(浏览器)都以不同的方式实现它,但让我们关注chrome的V8(根据我一年前在大多数现代浏览器上执行的性能测试,如果您遵循v8 guidline,它们会提供类似的性能提升)
它基本上发生的是:
希望能有所帮助……我认为您的语句“和对象与散列之间的差异”的意思是“和对象与(散列)映射之间的差异”。很好……但散列不是实际的Javascript类型吗?Javascript中没有散列类型。
{}
只是对象
类型的简写初始值设定项。和[]
只是数组
类型的简写初始值设定项。也许是原型散列类让我感到困惑:如果您只想存储键/值对,那么原型中绝对不需要该“散列”类型。不正确,或者至少过于简化。这并不是说“它们之间没有区别”它们实际上都是一样的,所以差别的大小不是0
,而是NaN
。然而……在这里,它们表明不同的isObject
实现可以给出不同的答案。简而言之,它是一个广义映射,而不是JavaScript中每个对象的哈希。在Java、C#和e等语言中tc.,映射用于同质类型的数据,而在JavaScript中,map
的数据只是异构的。
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
Object.prototype.helloWorld = function () { alert('Foo!'); };
var a = new Object();
var b = {};
a.helloWorld();
b.helloWorld();
var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"