关联数组与javascript中的对象

在我的脚本中,需要创build一个哈希表,我在谷歌search这个。 大多数人都在为此推荐JavaScript对象。 问题是,散列表中的一些键有“。” 在他们中。 我可以用关联数组轻松创build这些键。

我不明白为什么联合数组是不好的。 在我看到的网站中提到的第一件事是长度属性。 我来自Perl背景,我用哈希。 最常见的用途是从键中获取值,检查键是否存在,删除键值对,添加键值对。 如果这些是我的常见用法,我可以安全地使用关联数组吗?

在JavaScript中,对象是关联数组……对于它们没有单独的概念。 你也可以安全地使用'。' 在关键名称中,但只能使用括号表示法访问该值:

var foo = {} foo['bar'] = 'test'; foo['baz.bin'] = 'value'; alert(foo.bar); // shows 'test' alert(foo['baz.bin']); // shows 'value' 

如果你已经在使用它们,而且它们工作,那么你是安全的。

在JavaScript对象和数组是几乎相同的东西,数组有一些神奇的function(autoupdating长度属性等)和适合于数组的原型方法。 构造一个对象比使用关联数组要容易得多:

 var obj = {"my.key": "myValue"}; 

VS

 var obj = []; obj["my.key"] = "myValue"; 

因此,不要使用数组对象,而只是使用常规对象。

一些function:

 var obj = {}; //Initialized empty object 

删除一个键值对:

 delete obj[key]; 

检查密钥是否存在:

 key in obj; 

获得关键价值:

 obj[key]; 

添加一个键值对:

 obj[key] = value; 

因为在javascript中没有内置关联数组的东西。 这就是为什么它不好。

事实上,当你使用像这样的东西:

 theArray["a"] = "hello, world!"; 

它只是创build一个名为“a”的属性,并将其值设置为“hello,world!”。 这就是为什么长度始终为0,为什么alert(theArray)的输出是空的。

希望这可以帮助!

实际上,“关联数组”与ECMAscript中的“数组对象”几乎相同。 即使Arrays是ECMAscript中的对象,只是有数字键(在后台仍然是string),一个.length属性以及一些从Array.prototypeinheritance的方法。

所以,perl散列和ECMAscript对象的行为相似。 你可能不知道你不仅可以通过点来访问对象的属性,还可以使用括号和string来访问对象的属性

 var myObj = { foo: 42 }; myObj.foo; // 42 myObj['foo']; // 42 

知道这一点,你也可以使用键.

 var myObj = { }; myObj['hello.foo.world'] = 42; 

当然,只能用括号表示法访问该键。

你可以使用. 在JS对象的关键名称(又名关联数组)中,如果你愿意的话,他们被接受没有问题。 小缺点是你不能使用虚线键的快捷方式,例如

 var x = {}; x['hello'] = 'there'; alert(x.hello); 

是完全可以接受的,并会popup一个警告“在那里”。 但是,如果您使用虚线名称:

 var x = {}; x['this.is'] = 'sparta'; alert(x.this.is); 

会失败,因为Javascript会在x对象中寻找一个名为this的属性, this属性不存在。 只有this.is属性。

没有关联数组,它只是一个对象。

 foo.bar; // Equivalent to... foo["bar"]; // Looks like associative array. 

为了方便使用数据,对象和数组之间应该没有区别。 你可以认为它是一个对象,或者你可以把它想象成一个关联数组。 最后,你可以把所有东西都当作数据来思考。

  • 对于PHP ,[]接受0,1个或更多的项目(数组),它被称为关联数组 。 这是PHP的外套Json:

    $data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];

  • 对于Javacript ,{}接受0,1个或更多项(数组),它被称为对象 。 这个数据格式是Json:

    data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};

我只是叫他们的数据 。 描述数据最简单的方法是Json或其变体。