JavaScript的 对象 有个小问题,就是 键必须是字符串 。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型 Map。

初始化 Map 需要一个 二维数组 ,或者直接初始化一个 Map

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
var m = new Map(); // 空Map

Map 具有以下方法:

m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

Set Map 类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在 Set 中,没有重复的key,重复元素在 Set 中自动被过滤。

语法如下:

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 或者输入一个Array,结果为含1, 2, 3

Set具有的方法:添加和删除

var s = new Set([1, 2, 3, 3, '3']);  // Set {1, 2, 3, "3"}
s.add(4);  // Set {1, 2, 3, "3",4}  向Set中添加元素
s.add(4);  // Set {1, 2, 3, "3"}  重复添加没效果
s.delete(3);  // Set {1, 2, "3", 4}  删除Set中的元素
Map() Map类似于对象,Object提供了一种(字符串-)的hash结构,但是(key)只能字符串,而Map的key可以是任何数据类型 Map相当于加强版的对象(key)的取可以是所有类型, 但key不能重复。如果重复,则后面的会覆盖前面的,这就是先进先出原则 哈希结构(hash):是一种根据关码去寻找数据映... 对象的 key 是不保证顺序的,因为对于 number 是存放到 elements ,会按照从小到大,对于字符串类型的是存放到 properties ,会按照添加的顺。2、WeakMap 的 key 所引用的对象都是弱引用,只要对象的其他引用被删除,垃圾回收机制就会释放该对象占用的内存,从而避免内存泄漏。然后层层递进,就构成了实例与原型的链条,这就是所谓原型链的基本概念。无论什么时候,只要创建了一个函数,就会根据一组特定的规则为该函数创建一个 prototype 属性,这个属性指向函数的原型对象。 那么,我们从其能得到什么?Map比Object更快,除非你有小的整数、数组索引为,而且它更节省内存。若 Hash Map 需要经常更你应该使用Map;若你的集合为固定的(例如:记录)则使用Object,但是请注意原型继承带来的陷阱。如果你知道 V8 优化Map的细节,或者只是想指出我的基准测试的缺陷,请与我联系。我很乐意根据你的信息来更这个帖子。为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。 偶然的一次机会看到了这个题目,有一个网上的朋友说在面试的时候面到了这道题目,没有能给出解释。这里就谈一谈自己的理解。 在《Java 编程思想》有这么一句话:设计hashCode() 时最重要的因素就是对同一个对象调用hashCode() 都应该产生相同的。String 类型对象对这个条件有着很好的支持,因为String 对象的hashCode() 是根据String 对象的内容计算的,并... var element = document.getElementById('myDiv'); data[element] = 'metadata'; data['[object HTMLDivElement]'] // "metadata" 对象被自动转换为字符串。我们试图将一个对象 b 设置为对象 a 的,且相应的为 123。 然而,当字符串化一个对象时,它会变成 “[object Object]”。因此这里说的是,a["[objec Do you know a fast and simple way to encode a Javascript Object into astringthat I can pass via aGETRequest? NojQuery, no other frameworks - ... 题目是: 对数组进行去重操作,只考虑数组元素为数字或字符串,返回一个去重后的数组 function uniq2Array(arr) { //better 因为木有改变原来数组项的顺序 对象的隐形遍历查询属性查询? var result = [], obj = {}, i, len, key; for (i = 0, len = arr.length; i < 前几天在学习Map和Object时,忽然想到一个问题: 大家有思考过Object的key为什么要用toString()方法转换成字符串吗? 今上午查阅了一下资料,得到了一个大致的结论: 在js的Object,本质上是对的集合,是基于Hash表存储变量的。 可以通过Hash表的散列算法进行快速查找。 因为变量和对象的属性是随时可变的,所以,对象所占用的空间必须支持随时调整。从这个角度说,Ha... JavaScript 的对象是一种无序的集合数据类型,是由对组成的,与python字典有一定相似性。不过javascript的要求必须是字符串,而可以是其他类型,甚至必须是唯一的,因为当不唯一时,后面的会覆盖前面的。 var max = { 'birth-month':'January', 'birth-month':1} alert( intro JS的Object类型实际上是一种对映射(key-value pairs)。 但是JS这种对映射有点问题:key只能为string类型。 为了和其他编程语言有相似的数据结构(如Map, Dict等),ES6增了Map类型Map() 构造方法。 size 成员方法,返回map的大小。 set(key, value) - Map 对/修改,可“链式调用... JSON/对由组成,必须是字符串可以是字符串(string)、数(number) 、对象(object)、数组(array)、true、false、null。如图 1‑1所示:图1-1 JSON的在定义JSON/时,先是名,后面写一个冒号,然后是。如:"github": "https://github.com/leiqikui"这就等价于这条 JavaScript 语...