<分区>
我是 JavaScript 和学习的新手。
我看到一些代码,其中变量声明为 abcBean={};
然后被用作
abcBean[SOME_SET.KEY] = false
谁能解释一下如何将空对象用作数组?
标签 javascript arrays
<分区>
我是 JavaScript 和学习的新手。
我看到一些代码,其中变量声明为 abcBean={};
然后被用作
abcBean[SOME_SET.KEY] = false
谁能解释一下如何将空对象用作数组?
最佳答案
(免责声明:我在 Microsoft 的 Chakra JavaScript 引擎上工作)
在 JavaScript 中,所有对象都是原型(prototype)实例,它们的属性是在运行时定义的。它们可以使用点语法 (object.property
) 访问,也可以通过名称 (object['property']
) 访问,这样可以实现一些有趣的元编程场景。
在内部(在 JavaScript 引擎内)JavaScript 原型(prototype)对象通常被实现为一种字典或哈希表。您也可以使用 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;
关于javascript - 在 JavaScript 中用作数组的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486763/