219 lines
5.3 KiB
Markdown
219 lines
5.3 KiB
Markdown
# setmap
|
||
## 选择
|
||
1. 下面哪个不是set的方法
|
||
A.add B.delete C.has D.get
|
||
答案 D
|
||
|
||
2. 下面代码执行的结果为
|
||
|
||
```
|
||
let set = new Set([1, 2, 3, 4, 4]);
|
||
set.add(5)
|
||
set.add(6)
|
||
set.add(5)
|
||
console.log(set.size)
|
||
|
||
```
|
||
A.8 B.5 C.6 D. 4
|
||
答案 C
|
||
|
||
3. 下面代码执行的结果为
|
||
|
||
```
|
||
let set = new Set([1, 2, 3, 4, 4]);
|
||
set.set(5)
|
||
set.add(6)
|
||
set.add(5)
|
||
console.log(set.size)
|
||
|
||
```
|
||
A.报错 B.5 C.6 D. 4
|
||
答案 A
|
||
|
||
4. 下面代码执行的结果为
|
||
|
||
```
|
||
var mySet = new Set([1, 2, 3, 4, 4]);
|
||
console.log([...mySet]);
|
||
|
||
|
||
```
|
||
A.[1, 2, 3, 4, 4] B.[1, 2, 3, 4] C.[[1, 2, 3, 4, 4]] D.[]
|
||
答案 B
|
||
|
||
|
||
5. 下面代码的执行结果为
|
||
|
||
```
|
||
var myMap = new Map();
|
||
var keyObj = {},
|
||
|
||
myMap.set(keyObj, "和键 keyObj 关联的值");
|
||
console.log(myMap.get(keyObj));
|
||
console.log(myMap.get({}));
|
||
|
||
```
|
||
A."和键 keyObj 关联的值" {} B.报错 什么都不出 C.undefined null D."和键 keyObj 关联的值" undefined
|
||
答案 D
|
||
解析
|
||
因为 keyObj !== {}
|
||
|
||
6. 下面代码的执行结果为
|
||
```
|
||
var myMap = new Map();
|
||
var keyFunc = function () {}, // 函数
|
||
|
||
myMap.set(keyFunc, "和键 keyFunc 关联的值");
|
||
|
||
console.log(myMap.get(keyFunc)); // "和键 keyFunc 关联的值"
|
||
console.log(myMap.get(function() {})) // undefined, 因为 keyFunc !== function () {}
|
||
|
||
```
|
||
A."和键 keyFunc 关联的值" "和键 keyFunc 关联的值" B.报错 什么也不出
|
||
C."和键keyFunc 关联的值" undefined D.undefined undefined
|
||
|
||
答案 C
|
||
|
||
7. 下面代码的执行结果为
|
||
|
||
```
|
||
var myMap = new Map();
|
||
myMap.set(NaN, "not a number");
|
||
|
||
console.log(myMap.get(NaN)); // "not a number"
|
||
|
||
var otherNaN = Number("foo");
|
||
console.log(myMap.get(otherNaN)); // "not a number"
|
||
|
||
```
|
||
A.
|
||
8.
|
||
## 填空
|
||
1. 下面代码执行后 size的值打印出来是
|
||
|
||
```
|
||
let s = new Set();
|
||
s.add([1]);
|
||
s.add([1]);
|
||
console.log(s.size);
|
||
|
||
```
|
||
|
||
答案 2
|
||
解析:
|
||
这个问题类似于问这个:
|
||
|
||
let a = [1];
|
||
let b = [1];
|
||
console.log(a === b); // false
|
||
|
||
简单的说就是a和b是两个数组,两个引用对象,怎么可能相等呢?所以对于set来说,这俩不重复,所以是2!
|
||
|
||
1. 下面代码执行后 con的值打印出来是
|
||
答案 undefined
|
||
解析 因为set的时候用的数组[1]和get的时候用的数组[1]是分别两个不同的数组,只不过它们元素都是1。它们是分别定义的两个数组,并不是同一个值。
|
||
```
|
||
let map = new Map();
|
||
map.set([1],"ES6系列");
|
||
let con = map.get([1]);
|
||
console.log(con);
|
||
|
||
```
|
||
|
||
3. 用 声明一个set结构
|
||
答案 new Set
|
||
|
||
|
||
4. 通过 可以实现对set结构中元素的遍历
|
||
|
||
答案 for of foreach
|
||
|
||
|
||
|
||
4. 下面代码执行的结果为
|
||
|
||
```
|
||
|
||
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
|
||
var second = new Map([[1, 'uno'], [2, 'dos']]);
|
||
var merged = new Map([...first, ...second]);
|
||
console.log(merged)
|
||
|
||
```
|
||
答案 { 1 → "uno", 2 → "dos", 3 → "three" }
|
||
解析 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, three
|
||
|
||
|
||
4. 下面代码执行的结果为
|
||
|
||
```
|
||
|
||
var myMap = new Map();
|
||
var keyString = "a string";
|
||
|
||
myMap.set(keyString, "和键'a string'关联的值");
|
||
|
||
var jieguo = myMap.get(keyString); // "和键'a string'关联的值"
|
||
var jieguo1 = myMap.get("a string");
|
||
console.log(jieguo,jieguo1)
|
||
|
||
```
|
||
答案 和键'a string'关联的值 和键'a string'关联的值
|
||
|
||
|
||
|
||
map 遍历生成函数及其作用
|
||
答案
|
||
Map.prototype.keys():返回键名的遍历器。
|
||
Map.prototype.values():返回键值的遍历器。
|
||
Map.prototype.entries():返回所有成员的遍历器。
|
||
Map.prototype.forEach():遍历 Map 的所有成员。
|
||
|
||
|
||
|
||
|
||
## 简答题
|
||
1. maps和objects的区别
|
||
答案
|
||
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
|
||
Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
|
||
Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
|
||
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
|
||
|
||
|
||
2. WeakSet和Set的区别
|
||
答案
|
||
|
||
WeakSet的成员只能是对象,而不能是其他类型的值
|
||
WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
|
||
|
||
|
||
3. set 和 map的区别
|
||
答案 Set是一种类似数组的集合类型,它与数组不同的是,不允许存在重复数据;常用操作方法有:add,delete,has,clear等;遍历使用forEach;
|
||
|
||
Map是一种类似对象的集合类型,它与对象不同的是,key可以接受对象类型,常用的操作方法有:set,get,has,delete等;遍历使用forEach
|
||
|
||
|
||
|
||
4. 定义一个函数 将传入的数组元素去重后返回(可以写多种方法)
|
||
详见 https://segmentfault.com/a/1190000016418021?utm_source=tag-
|
||
|
||
|
||
|
||
5. 用 foreach 和 for of 分别遍历下面这个set
|
||
var myMap=new Map()
|
||
myMap.set(0, "zero");
|
||
myMap.set(1, "one");
|
||
|
||
|
||
|
||
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
|
||
var second = new Map([[1, 'uno'], [2, 'dos']]);
|
||
var merged = new Map([...first, ...second]);
|
||
|
||
|
||
6.module、import
|
||
|
||
|
||
|