关联数组与javascript中的对象

时间:2011-11-09 15:49:19

标签: javascript

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

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

7 个答案:

答案 0 :(得分:87)

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

var foo = {}
foo['bar'] = 'test';
foo['baz.bin'] = 'value';

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

如果您已经使用它们并且它们有效,那么您就是安全的。

答案 1 :(得分:33)

在javascript对象和数组中几乎是一回事,数组具有一些神奇的功能(自动调整长度属性等)和适用于数组的原型方法。构造对象比使用关联数组要容易得多:

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

VS

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

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

一些功能:

var obj = {}; //Initialized empty object

删除键值对:

delete obj[key];

检查密钥是否存在:

key in obj;

获取关键值:

obj[key];

添加一个键值对:

obj[key] = value;

答案 2 :(得分:19)

因为在javascript中没有内置关联数组这样的东西。这就是为什么它很糟糕。

事实上,当你使用类似的东西时:

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

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

希望这有帮助!

答案 3 :(得分:8)

实际上,“关联数组”与ECMAscript中的“类数组对象”非常相似。甚至Arrays都是ECMAscript中的对象,只有数字键(后台仍然是字符串)的例外,.length属性以及来自Array.prototype的一些继承方法。

因此,perl哈希和ECMAscript对象的行为类似。您可能不知道您不仅可以通过点访问对象属性,还可以使用括号和字符串访问对象属性,例如

var myObj = { foo: 42 };

myObj.foo; // 42
myObj['foo']; // 42

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

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

当然,您只能使用括号表示法访问该密钥。

答案 4 :(得分:7)

如果您愿意,可以在JS对象(也称为关联数组)的键名中使用.,它们可以毫无问题地被接受。缺点是您不能使用带有虚线键的快捷符号,例如

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

是完全可以接受的,并会在其中弹出“有”的警报。但是如果你使用虚线名称:

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

将失败,因为Javascript将在x对象中查找名为this的属性,该属性不存在。只有this.is属性。

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

为了方便使用数据,对象和数组之间应该没有区别。您可以将其视为对象,也可以将其视为关联数组。最后,您可以将所有内容都视为数据

  • 对于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 ,或其变体。

相关问题