考题:
一、Set对象是什么?
1.Set对象是一种新型的数据结构;
2.Set对象是一种存储任何类型的唯一值的,新型的数据结构;
二、Set对象增删改查的语法:
语法:
new Set()//创建一个空set对象
new Set(iterable)//创建一个有值的set对象
三、NaN是什么?
不是数值的数值类型;
NaN有什么特点?
NaN不等于NaN;//NaN====NaN//flase
四、数组转字符串的方法;
array.toString()/ array.join()
五、字符串转数组方法?
array.join()
六、字符串去重?'tomato'
new Set()
七、对象中的key语法是什么?:{x:1}
对象的属性名必须是一个字符串/或/计算属性/或/symbol;
八、计算属性?
计算属性是es6引入的一种命名对象key的方法。
大纲Set等于=数组的升级版(??大方法)对象是属性的无序集合;数组是集的有序;
- 定义:一个是构造函数;
- 用来实例化一个set对象;
- 必须使用new调用;
- set对象用来存储任何类型的唯一值。
- 重复值Set排重复的(包含的值是唯一的)
- 语法:
new Set()//创建一个空set对象
new Set(iterable)//创建一个有值的set对象
- 参数: iterable:可迭代对象(可以使用for of遍历的)
- 返回值:返回一个set对象;
- 实例1:
new Set()
输出:
new Set[]
- 实例2:创建一个Set对象
const arr = [1,2,3,4,3,2,1]
let set = new Set(arr)
console.log(set);//Set(4) [ 1, 2, 3, 4 ]
------
const arr=[1,2,3,4]
const s1=new Set(arr)
console.log(arr);
console.log(s1);
- 输出:
Array(4) [ 1, 2, 3, 4 ]
Set(4) [ 1, 2, 3, 4 ]
- 实例3:重复值Set排重复的(包含的值是唯一的)
const arr=[1,2,3,4,3,2,1]
const s1=new Set(arr)
console.log(arr);
console.log(s1);
-输出:
Array(7) [ 1, 2, 3, 4, 3, 2, 1 ]
Set(4) [ 1, 2, 3, 4 ]//排重,不会有同样数字出现;
- 实例4:set可以存储任意类型的唯一值,对象也不例外,对象存储的是地址
const obj = {x:1}
const arr = [obj,{x:2},3,4,3,4,{x:2},obj]
const sl = new Set(arr)
console.log(arr);
console.log(sl);
- 输出:Array(8) [ {…}, {…}, 3, 4, 3, 4, {…}, {…} ]
Set(5) [ {…}, {…}, 3, 4, {…} ]
一、Set.prototype.add()
- 定义:用于set对象中添加新值;(如果值已存在不做添加)
- 语法:
set.add(value)//value:任意类型的值;
- 返回值:返回更新后的set对象;(支持链式调用)
- 实例1:基本用法
const set1=new Set()
set1.add(1)
set1.add('hello')
set1.add(true)
set1.add(undefined)
set1.add(null)
set1.add(NaN)
set1.add([1,2,3])
set1.add({x:1})
console.log((set1));
- 输出:Set(8) [ 1, "hello", true, undefined, null, NaN, (3) […], {…} ]
- 实例2:支持链式调用(一次性在小括号内只能添加一个值)
const set1=new Set()
set1.add(1).add(2)//可以重复添加
set1.add('hello')
set1.add(true)
set1.add(undefined).add(undefined)//不会重复添加即使是undefined;
set1.add(null)
set1.add(NaN).add(NaN)//不会重复添加即使是NaN;
set1.add([1,2,3])
set1.add({x:1})
console.log((set1));
二、Set.prototype.has()
- 定义:用于检索set对象中是否存在指定值;
- 语法:
set.has(value)//value是你要检索的值
- 返回值:布尔值;
- true:存在
- flase:不存在
- 实例:
const set1=new Set()
set1.add(1)
set1.add('hello')
set1.add(true)
set1.add(undefined).add(undefined)
set1.add(null)
set1.add(NaN).add(NaN)
set1.add([1,2,3])
set1.add({x:1})
console.log((set1));
const find=set1.has(1)
console.log((find));
- 输出:true
-----
const set1=new Set()
set1.add(1)
set1.add('hello')
set1.add(true)
set1.add(undefined).add(undefined)
set1.add(null)
set1.add(NaN).add(NaN)
set1.add([1,2,3])
set1.add({x:1})
console.log((set1));
const find=set1.has(100)
console.log((find));
- 输出:false
三、Set.prototype.delete()
- 定义:从 Set 对象中删除指定的值(如果该值在 Set 中)
- 语法:
delete(value)
- 返回值:布尔值
- 成功删除返回 true,否则返回 false。
- 实例:
// constset = new Set()
// set.add(1).add(2).add(3).add(4)
// console.log(set);
// // 删除set中2
// set.delete(2)
// console.log(set);
// for (value of set) {
// if (value === 1) {
// value = 100
// }
// }
const set = new Set()
set.add(1).add(2).add(3).add(4)
console.log(set);
// 删除set中的2
set.delete(2)
console.log(set);
如何修改Set对象的值
setAPI没有提供一种直接的修改值的方法,我们只能???
四、Set.prototype.forEach()
- 定义:用于遍历Set对象;
forEach() 方法对 Set 对象中的每个值按插入顺序执行一次提供的函数。 - 语法:
set.forEach(value,key,set){}
-------
// 箭头函数
forEach(() => { /* ... */ } )
forEach((value) => { /* ... */ } )
forEach((value, key) => { /* ... */ } )
forEach((value, key, set) => { /* ... */ } )
// 回调函数
forEach(callbackFn)
forEach(callbackFn, thisArg)
// 内联回调函数
forEach(function() { /* ... */ })
forEach(function(value) { /* ... */ })
forEach(function(value, key) { /* ... */ })
forEach(function(value, key, set) { /* ... */ })
forEach(function(value, key, set) { /* ... */ }, thisArg)
- callbackFn:对set对象中的每一个值调用一次回调函数。回调三个参数:
- value:传入set的每一个值;
- key:调用 forEach() 的 Set 对象。
- thisArg:值在执行 callbackFn 时作为 this 使用。
返回值:
undefined
。实例1:
const set = new Set(['a', 'b', 'c'])
const set3 = new Set()
set.forEach((value, key, set) => {
console.log(value);
console.log(key);
console.log(set);
if (value === 'b') value = 'bbb'
set3.add(value)
})
console.log(set3);
----
- 实例2:修改set对象中的值
let set = new Set
set.forEach((value,key,set)=>{
// console.log(value);
// console.log(key);
// console.log(set);
if(value===1)value= "ccc"
console.log(value);
})
---
- 输出:
c
Set(3) [ "a", "b", "c" ]
Set(3) [ "a", "bbb", "c" ]
大纲Map构造函数
- 定义:
- Map()是Es6新增的内置构造函数;
- Map()构造函数用于创建Map对象;(也被称之词典)
-详细: 单词map:1.映射;2.地图; - 语法:
//必须使用new调用;直接调用回报错;
new Map()
new Map(uterable)//传入可迭代对象,传入的可迭代必须是**键值对形式(value key)**
- 返回值·:
- 实例1:直接构造函数调用回报错;
const map=new Map()//报错
- 实例2:传入一个数组,也会报错;
const arr=[1,2,3]
const map=new Map(arr)
console.log(map)//报错
- 实例3:必须传入一个键值对形式对象;
let obj = [["x","y"],["1","2"],["x","y"]]
const map =new Map(obj)
- 输出:console.log(map);//Map { x → "y", 1 → "2"}
Map对象是什么?Map是object的,键值对(名称、值)的有序集合;
- 定义:
- Map对象是Es6引入的一种新型数据结构;
- 和es6中的object一样,也使用键值对形式存储数据;
- 和object不一样:1.有序存储;2.map对象可以是任意数据类型;
iterable:
1.可迭代对象;:2.可迭代对象必须是键值对形式 - 语法:
new Map()
new Map(iterable)
iterable:可迭代对象。注意:传入的可迭代的对象必须是键值对;
new Map([1,2,3])//报错
new Map([1,'a'],[2,'b'],[3,'c'])//ok
new Map({x:1})//报错:对象不可迭代;
new Map('hello')//报错
new Map(
[0,'a'],
['hello,'b'],
[ture,'c'],
[undefined,'d'],
[null,'e'],
[{x:1},'f'],
[,'a'],
[{x:1},'f'],
)
map增删改查(11个方法)
一、增 Map.prototype.set()
set() 方法为 Map 对象添加或修改一个键(key)和值(value)的(新)键值对。
- 语法:
map.set(key, value)
返回值:返回更新后的map对象
示例,添加一个新的键值对:
let a = 1+1
function fn(){}
let obj = [[0,"a"],[a,"b"],[1,"c"],[fn(),"d"],[undefined,"e"],[NaN,"e"],["c","g"]]
const map =new Map(obj)
map.set("黄永福","投影仪")
console.log(map);//Map(7) { 0 → "a", 2 → "b", 1 → "c", undefined → "e", NaN → "e", c → "g", "黄永福" → "投影仪" }
示例,修改键值对:
let a = 1+1
function fn(){}
let obj = [[0,"a"],[a,"b"],[1,"c"],[fn(),"d"],[undefined,"e"],[NaN,"e"],["c","g"]]
const map =new Map(obj)
map.set("黄永福","投影仪")
console.log(map);//Map(7) { 0 → "a", 2 → "b", 1 → "c", undefined → "e", NaN → "e", c → "g", "黄永福" → "投影仪" }
map.set("黄永福","记录委员")
console.log(map.get("黄永福"));//记录委员
二、删Map.prototype.clear()
- 定义:
clear() 方法会移除 Map 对象中的所有键值对。
语法:
map.clear()
- 返回值:
无参数
返回undefined
二、删 Map.prototype.delete()
- 定义:用于删除指定的键;
- 语法:
delete(key)
- 返回值:
- 实例:
// 定义:
const obj = { x: 1 }
const arr = [1, 2, 3]
const fn = function () { }
const map = new Map([
[0, 'a'],
['hello', 'b'],
[true, 'c'],
[undefined, 'd'],
[null, 'e'],
[obj, 'f'], //[{ x: 1 }, 'f'],//const obj={x:1}
[arr, 'g'], //[[1, 2, 3], 'g'],//const arr=[1,2,3]
[fn, 'h'] //[function () { }, 'h']//=>const fn=function(){}
])
console.log(map.set('黄永福', '黄永福,投影仪管理员'));//添加
console.log(map.get('黄永福'));
console.log(map.set('黄永福'['纪律原委','饮水机管理员']));//替换
console.log(map.has('陈有红'));//
console.log(map.delete('黄永福'));//删除
console.log(map);
console.log(map.get(0, 'a'));
console.log(map.get('hello', 'b'));
console.log(map.get(true, 'c'));
console.log(map.get(undefined, 'd'));
console.log(map.get(null, 'e'));
console.log(map.get(obj, 'f'));
console.log(map.get(arr, 'g'));
console.log(map.get(fn, 'h'));
三、改 Map.prototype.has()
- 定义:用于检索Map对象中是否具有指定的key;
- 语法:
Map.has(key)
- 返回值:布尔值;
- true:检测到;
- flase:莫有检测到;
- 实例:
// 定义:
const obj = { x: 1 }
const arr = [1, 2, 3]
const fn = function () { }
const map = new Map([
[0, 'a'],
['hello', 'b'],
[true, 'c'],
[undefined, 'd'],
[null, 'e'],
[obj, 'f'], //[{ x: 1 }, 'f'],//const obj={x:1}
[arr, 'g'], //[[1, 2, 3], 'g'],//const arr=[1,2,3]
[fn, 'h'] //[function () { }, 'h']//=>const fn=function(){}
])
console.log(map.set('黄永福', '黄永福,投影仪管理员'));//添加
console.log(map.get('黄永福'));
console.log(map.set('黄永福'['纪律原委','饮水机管理员']));//替换
console.log(map.has('陈有红'));//检索Map对象中是否具有指定的key;
console.log(map.delete('黄永福'));//删除
console.log(map);
console.log(map.get(0, 'a'));
console.log(map.get('hello', 'b'));
console.log(map.get(true, 'c'));
console.log(map.get(undefined, 'd'));
console.log(map.get(null, 'e'));
console.log(map.get(obj, 'f'));
console.log(map.get(arr, 'g'));
console.log(map.get(fn, 'h'));
四、查 Map.prototype.get()
- 定义:get()方法用于查询指定key的value
- 语法:
map.get(key)
- 返回值:value查到了
undefied:没有找到 - 示例:
let obj = [[null,"y"],[["a"+"b"],"2"],[1,"y"],[function(){},true],[undefined,"c"],[NaN,1]]
const map =new Map(obj)
console.log(map.get(null));//y
四、查 Map.prototype.has()
has() 方法返回一个布尔值,查询指定键的元素是否存在。
返回值:true存在 false不存在
五、Map.prototype.forEach()
- 定义:用于定义遍历Map对象;
- 语法:
//记住这个!! 回调函数
forEach(callbackFn)
forEach(callbackFn, thisArg)
// 箭头函数
forEach(() => { /* … */ } )
forEach((value) => { /* … */ } )
forEach((value, key) => { /* … */ } )
forEach((value, key, map) => { /* … */ } )
// 内联回调函数
forEach(function() { /* … */ })
forEach(function(value) { /* … */ })
forEach(function(value, key) { /* … */ })
forEach(function(value, key, map) { /* … */ })
forEach(function(value, key, map) { /* … */ }, thisArg)
返回值:没有返回值;
undefined
。实例:
const boy1 = { name: '陈有红' }
const girl1 = { name: '王立' }
const boy2 = { name: '田亮' }
const map = new Map([
[boy1, '纪律原委'],
[girl1, '门窗原委'],
[boy2, '插座原委'],
])
map.forEach((value, key, name) => {
console.log(value);
console.log(key);//boy1=>object
console.log(map);
})
六、Map.prototype.keys()
定义:keys() 返回一个引用迭代器,它包含按照顺序插入 Map 对象中每个元素的 key 值。
语法:
map.keys()
注意:单独提取键值对需要配合next().value
- 返回值:一个新的可迭代的 Map 迭代器对象。
- 示例1拿到keys:
const bod1 = {name:"cyh"}
const girl2 = {name:"wl"}
const bod2 = {name:"tl"}
const map = new Map([
[bod1,"记录"],
[girl2,'蒙城'],
[bod2,"插座"]
])
const maps = map.keys()
console.log(maps.next().value);//Object { name: "cyh" }
七、Map.prototype.values()
- 定义:方法返回一个新的迭代器对象
- 语法:
values()
返回值:一个新的
Map
可迭代对象。实例:
/const bod1 = {name:"cyh"}
const girl2 = {name:"wl"}
const bod2 = {name:"tl"}
const map = new Map([
[bod1,"记录"],
[girl2,'蒙城'],
[bod2,"插座"]
])
const values = map.values()
console.log(values.next().value);//记录
八、Map.prototype.entries()
- 定义:
返回一个新的迭代器map对象,其中包含 Map 对象中按插入顺序排列的每个元素的[key, value]
对。
语法:
map.entries()
返回值:返回一个可迭代map对象
注意:单独提取键值对需要配合next().value
示例:
const bod1 = {name:"cyh"}
const girl2 = {name:"wl"}
const bod2 = {name:"tl"}
const map = new Map([
[bod1,""],
[girl2,'小城夏天'],
[bod2,"宝座"]
])
const maps = map.entries()
console.log(maps.next().value);//Array [ {name:cyh}}, "记录" ]
九、map.prototype.size
只读属性
返回map对象中有多少属性
语法:
map.size
返回值:数值,返回map对象中有多少属性
示例:
const bod1 = {name:"cyh"}
const girl2 = {name:"wl"}
const bod2 = {name:"tl"}
const map = new Map([
[bod1,"记录"],
[girl2,'蒙城'],
[bod2,"插座"]
])
console.log(map.size);//3
------------
#Map和Object的区别?
1.map有长度,Object没有;
2.map可迭代,Object不可以迭代;
**key:**
- 3. map的key可以是任意类型;
- 4. Object的可以只能是字符串,计算属性、Symbol;
----
#Object对象是键值对的无序集合;
Map:键值对(名称、值)的有序集合;
------
#计算属性
- 定义:对象的属性名必须是一个字符串或计算属性或symbol;
##es6计算属性
es6命名对象key的方法。
用方括号设置对象的属性名
对象的属性名是一个表达式
- 实例:
const obj = {
[a+b]:x
}