gpt4 book ai didi

javascript - 当我使用括号表示法添加键/值对时,为什么 Map size 属性不更新?

转载 作者:行者123 更新时间:2023-11-30 07:53:35 25 4
gpt4 key购买 nike

根据 MDN,size Map 对象的属性应该表示 Map 对象具有的条目数。但是,如果我创建一个空的 Map 并使用括号表示法(不确定它的正式名称是什么)来添加键/值对,则 size 属性是没有更新。但是,如果我使用 Map.set(key, value) 函数,则会更新该属性。这是为什么?

例子:

var ex = new Map();
ex['key1'] = 'value1';
ex.set('key2', 'value2');

运行后,ex.size 返回 1

最佳答案

因为向 map 对象添加属性与向 map 添加元素不同(反之亦然)。试试 ex.get('key1')(和 ex['key2'])。只有 Map#set 向 map 添加元素。如果您考虑一下 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;
}
}

向类的实例添加属性不会影响 this._items,它是存储映射条目的地方。


您基本上可以向 JavaScript 中的任何对象添加任意属性,但这并不意味着该对象可以对它们执行任何操作。

最令人困惑的情况可能是数组。只有数值介于 02^32 之间的属性才被视为数组的“元素”。所以当我这样做的时候

var arr = [];
arr.foo = 42;

那么 arr.length 仍然是 0

关于javascript - 当我使用括号表示法添加键/值对时,为什么 Map size 属性不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46672623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com