对JavaScript的Map,有几个问题:
var map = new Map()
map.set({'k1': 'v1'})
map.set({'k2': 'v2'})
map.set({3: 'v3'})
for (item in map.keys()) {
console.log(item)
}
console.log(map.keys()) // [Map Iterator] { { k1: 'v1' }, { k2: 'v2' }, { '3': 'v3' } }
1.Map的key是什么? 在打印的时候:
[Map Iterator] { { k1: 'v1' }, { k2: 'v2' }, { '3': 'v3' } }
可见k1
并不是引号包裹,是否是字符串?
这个key'3'
是引号包裹。
2.map.keys()
是可迭代对象,不能在for of 循环内被迭代吗?
map.set(key, value) 是需要两个参数的,你只提供了一个。那么第二个参数是 undefined。
所以最终 map 里有三个 entry ,key 分别是 {'k1': 'v1'} {'k2': 'v2'} {3: 'v3'},value 都是 undefined。
对应形如 {'k1': 'v1'} 的 object ,其属性只能是 string 或 Symbol 。写的时候,只要没有歧义,并且符合语法(比如,必须是合法的数字或标识符),加不加引号都是一样的。
可以用 for of 。(不过你问题里的程序里写的是 for in)