关联数组与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.prototype
inheritance的方法。
所以,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或其变体。