我是JavaScript和学习的新手。
我看到一些代码,其中变量声明为abcBean={};
然后用作
abcBean[SOME_SET.KEY] = false
有人可以解释一下如何将空对象用作数组吗?
答案 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内部,array1
和array2
对象将表示为整数数组,但dict1
和dict2
都是哈希表对象,但是如果添加非整数元素到array1
或array2
,或者按键添加元素,然后Chakra将(在幕后)在内部重新表示对象作为哈希表(或其他更合适的表示)。
值得注意的是,这将不在内部将array1
扩展为101个元素大小的数组:
var array1 = [ 1, 2, 3 ];
array[100] = 5;