javascript - 在 JavaScript 中用作数组的空对象

标签 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 内部,array1array2 对象将表示为整数数组,但 dict1dict2 都将表示是哈希表对象,但是如果您向 array1array2 添加一个非整数元素,或者通过键添加一个元素,那么 Chakra 将(在幕后)重新表示对象在内部作为哈希表(或其他一些更合适的表示)。

请注意,这不会在内部将 array1 扩展为 101 个元素大小的数组:

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

关于javascript - 在 JavaScript 中用作数组的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486763/

相关文章:

javascript - 使用代理创建动态不可配置的属性

javascript - 使用cloudflare缓存动态页面

java - 在 JSONArray 中搜索 JSON 元素

php - 检查FK订单编号是否正确

javascript - 在javascript中从任意复杂的JSON对象生成html

javascript - 在ReactJS中获取数据

java - 查找用户输入的数组中项目的索引

javascript - 如何根据子属性将 JSON 排序到数组中

c - 如何在 C 中查找 unsigned char 指针的长度?

javascript - Number(...) 和 parseFloat(...) 有什么区别