Ian*_*Ian 1 javascript ecmascript-6 es6-map
根据MDN,对象的size
属性Map
应该表示Map
对象具有的条目数.但是,如果我创建一个空Map
并使用括号表示法(不确定其正式名称是什么)来添加键/值对,size
则不会更新该属性.但是,如果我使用该Map.set(key, value)
函数,则更新属性.为什么是这样?
例:
var ex = new Map();
ex['key1'] = 'value1';
ex.set('key2', 'value2');
Run Code Online (Sandbox Code Playgroud)
运行后,ex.size
返回1
.
因为向地图对象添加属性与向地图添加元素不同(反之亦然).试试ex.get('key1')
(和ex['key2']
).仅Map#set
向地图添加元素.如果您考虑这种可怜且有限的实施方式,可能会更清楚Map
:
class Map {
constructor() {
this._items = {};
}
set(key, value) {
this._items[key] = value;
}
get(key) {
return this._items[key];
}
get size() {
return Object.keys(this._items).length;
}
}
Run Code Online (Sandbox Code Playgroud)
将属性添加到类的实例不会影响this._items
,这是存储映射条目的位置.
您可以向JavaScript中的任何对象添加任意属性,但这并不意味着对象正在对它们执行任何操作.
最令人困惑的情况可能是数组.只有数值介于0
和之间的属性才被2^32
视为数组的"元素".所以,当我这样做
var arr = [];
arr.foo = 42;
Run Code Online (Sandbox Code Playgroud)
然后arr.length
仍然会0
.
归档时间: |
|
查看次数: |
38 次 |
最近记录: |