在JavaScript

时间:2015-09-09 18:28:29

标签: javascript arrays

我是JavaScript和学习的新手。 我看到一些代码,其中变量声明为abcBean={};

然后用作

abcBean[SOME_SET.KEY] = false

有人可以解释一下如何将空对象用作数组吗?

1 个答案:

答案 0 :(得分:2)

(免责声明:我使用微软的Chakra JavaScript引擎)

在JavaScript中,所有对象都是原型实例,并且它们的属性是在运行时定义的。可以使用点语法(object.property)以及名称(object['property'])来访问它们,这可以启用一些有趣的元编程方案。

内部(在JavaScript引擎内)JavaScript原型对象通常实现为一种字典或散列表。您也可以使用Number实例作为键,而不仅仅是名称,它具有JavaScript对象的有趣效果,表现出一种二元性,它既是一个数组(由整数偏移量索引),也是一个字典(由整数键索引。)

例如,可以认为这四个对象是等价的:

var array1 = [ 1, 2, 3 ];
var array2 = new Array( 1, 2, 3 );
var dict1 = { 0: 1, 1: 2, 2: 3 };

function Constructor() { this[0] = 1; this[1] = 2; this[2] = 3; }
var dict2 = new Constructor();

在实践中,引擎具有优化,其中JavaScript数组和对象基于其初始化语法以不同方式处理。在Chakra内部,array1array2对象将表示为整数数组,但dict1dict2都是哈希表对象,但是如果添加非整数元素到array1array2,或者按键添加元素,然后Chakra将(在幕后)在内部重新表示对象作为哈希表(或其他更合适的表示)。

值得注意的是,这将在内部将array1扩展为101个元素大小的数组:

var array1 = [ 1, 2, 3 ];
array[100] = 5;