在我的脚本中需要创建一个哈希表,我在谷歌上搜索了一下。大多数人都建议使用JavaScript对象来实现。问题是哈希表中的某些键中有“.”。我可以很容易地使用关联数组创建这些键。
我不明白为什么关联数组不好。我看到的网站上第一件事就是提到了长度属性。
我来自Perl背景,我使用哈希表的最常见用法是获取值、检查键是否存在、删除键值对和添加键值对。如果这些是我的常见用法,我能否安全地使用关联数组?
在我的脚本中需要创建一个哈希表,我在谷歌上搜索了一下。大多数人都建议使用JavaScript对象来实现。问题是哈希表中的某些键中有“.”。我可以很容易地使用关联数组创建这些键。
我不明白为什么关联数组不好。我看到的网站上第一件事就是提到了长度属性。
我来自Perl背景,我使用哈希表的最常见用法是获取值、检查键是否存在、删除键值对和添加键值对。如果这些是我的常见用法,我能否安全地使用关联数组?
在JavaScript中,对象是关联数组...它们没有分开的概念。您还可以安全地在键名中使用“.”,但只能使用括号表示法来访问值:
var foo = {}
foo['bar'] = 'test';
foo['baz.bin'] = 'value';
alert(foo.bar); // Shows 'test'
alert(foo['baz.bin']); // Shows 'value'
如果你已经在使用它们并且它们可用,则是安全的。
foo.length=0
。 - zeros-and-ones在JavaScript中,对象和数组基本上是一样的,只不过数组有一些神奇的功能(自动更新长度属性等)和适用于数组的原型方法。构造一个对象比使用关联数组要容易得多:
var obj = {"my.key": "myValue"};
对比。
var obj = [];
obj["my.key"] = "myValue";
因此,永远不要使用数组对象进行此操作,而只需使用常规对象。
一些功能:var obj = {}; // Initialized empty object
删除一个键值对:
delete obj[key];
检查一个键是否存在:
key in obj;
获取键值:
obj[key];
添加一个键值对:
obj[key] = value;
([] instanceof Object)
。你会得到true
。现在尝试这个:(typeof [])
。你会得到"object"
。在JavaScript中,数组是对象。 - Ajedi32因为JavaScript中不存在内置的关联数组。这就是为令人不满的原因。
事实上,当你使用像下面这样的东西:
theArray["a"] = "Hello, World!";
它只是创建了一个名为“a”的属性并将其值设置为“Hello, World!”。这就是为什么长度始终为0,以及为什么alert(theArray)
的输出为空的原因。
实际上,“关联数组”在ECMAScript中与“类似数组的对象”基本相同。在ECMAScript中,甚至数组也是对象,只是具有数字键(在后台仍然是字符串)和.length
属性,以及一些来自Array.prototype
的继承方法。
因此,Perl哈希和ECMAScript对象行为类似。您可能不知道,您不仅可以通过点访问对象属性,还可以使用括号和字符串访问,例如
var myObj = { foo: 42 };
myObj.foo; // 42
myObj['foo']; // 42
了解这一点后,您还可以使用带有.
的键。
var myObj = { };
myObj['hello.foo.world'] = 42;
如果需要,您可以在JavaScript对象(也称关联数组)的键名中使用 .
;它们会被无问题地接受。 小缺点是您不能使用带有点的键的快捷符号,例如:
var x = {};
x['hello'] = 'there';
alert(x.hello);
使用`alert('there')`是完全可以的,会弹出一个包含'there'的警示对话框。但是如果你使用点操作符:
var x = {};
x['this.is'] = 'sparta';
alert(x.this.is);
由于JavaScript会在x对象中查找名为this
的属性,但实际上该属性并不存在,因此将失败。只有this.is
属性存在。
没有关联数组。它只是一个对象。
foo.bar; // Equivalent to...
foo["bar"]; // Looks like associative array.
bar ='plugh'; foo [bar]
将返回由foo.plugh
引用的值。 - Dave Newton对于PHP,[ ]接受0、1或多个项(数组),并且被称为关联数组。这就是PHP中的JSON:
$data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];
对于JavaScript,{ }接受0、1或多个项(数组),并且被称为对象。这种数据格式是JSON:
data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};