Set()里面的has() 与delect()案例
创建一个Promise对象 pening进行中 resolved已完成 rejected以失败
<script>
//创建一个 Promise对象
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("hello world")
}, 2000);
})
</script>
<script>
// 参数 resolve代表的是成功
// reject 代表的是失败
// resolve 和 reject代表的都是函数
let promise_1 = new Promise((resolve, reject) => {
num = 20
if (num > 10) {
resolve("num大于10") //成功
} else {
reject("num小于10") //失败
}
})
promise_1.then((data) => {
console.log(data)
}, (data) => {
console.log(data)
})
</script>
catch( )用于捕获异常
Promise的使用: 案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="button" value="button" id="btn">
<script>
// 获取input
var btn = document.getElementById("btn")
// 添加click点击事件
btn.addEventListener('click', () => {
// 创建一个promise对象
var promise = new Promise((resolve, reject) => {
// 弹出一个输入框
var num = parseInt(prompt("请输入一个1-10以内的整数"))
// 随机一个1-10的整数(不包含10)
var random = Math.floor(Math.random() * 10)
// 让他们if判断 相等就是猜对了
setTimeout(() => {
if (num == random) {
resolve("猜对了")
} else {
reject("猜错了")
}
}, 2000)
})
//
promise.then((data) => {
alert(data)
}).catch((data) => {
alert(data)
})
})
</script>
</body>
</html>
Set:集合跟数组很像,但是其中存放的元素是唯一的
Set可以解决数组去重问题
创建一个Set实例
const s = new Set()
<script>
// Set() 可以自动去重
var arr = [23, 23, 4, 4, 3, 3]
var s_1 = new Set(arr)
console.log(s_1) //Set(3) {23, 4, 3}
//将Set()集合转化成数组,使用Array.from()
var s_2 = new Set([1, 2, 3, 4, 5, 6])
console.log(s_2); //Set(6) {1, 2, 3, 4, 5, …}
var arr_1 = Array.from(s_2)
console.log(arr_1); //(6) [1, 2, 3, 4, 5, 6]
//获取元素的个数
console.log(s_2.size) //6 (数组会自动去重)
// add() 是给Set集合添加元素
//push() 给数组头部添加元素 pop()尾部删除 unshift()头部添加 shift() 头部删除
var s_3 = new Set()
s_3.add(30)
console.log(s_3) //Set(1) {30}
var s_4 = new Set([8, 7, 6, 5, 5, 4, 3, 5, 23, 4])
// delete()//删除
console.log(s_4.delete(5)) //true
// has() 判断是否有数字8
if (s_4.has(8)) {
// 有就删除
s_4.delete(8)
alert("删除成功")
} else {
console.log("没有")
}
</script>
查找数组中是否有该元素 有就删除 没有就提示没有
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" name="" id="uname">
<input type="button" value="删除" id="btn">
<script>
var sss = new Set(["zhangsan", "zhangsi", "zhangwu", "zhangliu"])
document.getElementById("btn").addEventListener("click", () => {
let name = document.getElementById("uname").value;
if (sss.has(name)) {
sss.delete(name)
alert("删除成功")
console.log(sss)
} else {
alert("数组中没有" + name + "无法删除")
}
})
// console.log(sss)
</script>
</body>
</html>
clear( ) 清空集合中全部的元素
迭代:
keys():返回键名;
values():返回键值;
entries():返回键值对;
键名=键值
<script>
let arr = [23, 43, 54, 34, 65, 43]
var s_1 = new Set(arr)
for (const i of s_1.keys()) {
console.log("键:" + i);
}
console.log("...............");
for (const i1 of s_1.values()) {
console.log("值" + i1)
}
console.log("...............");
for (const i2 of s_1.entries()) {
console.log("键值对" + i2)
}
console.log("...............");
s_1.forEach((values, keys) => {
console.log(keys + ":" + values);
})
</script>
Map
let m = new Map()
set(key , value) 添加
get(key ) 读取 (根据键获取值)
clear() 清空
<script>
// 创建一个Map对象
// set(key , value) 添加
// get(key ) 读取 (根据键获取值)
let tels = new Map()
tels.set("张三", "111111111")
tels.set("张四", "222222222")
tels.set("张五", "333333333")
console.log(tels.get("张三"))
console.log(tels)
// clear() 清空 delete("张三") 删除一个数据
console.log("----------")
for (const q of tels) {
console.log(q[0], q[1])// 张三, 111111111 张四, 222222222 张五 333333333
}
console.log("----------")
const map1 = new Map()
map1.set('k1', 1)
map1.set('k2', 2)
map1.set('k3', 3)
console.log(Array.from(map1).toString()); //k1,1,k2,2,k3,3
console.log("----------")
console.log(Array.from('hello world'));//(11) ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
console.log(map1.keys());//{'k1', 'k2', 'k3'}
console.log(map1.values());// {1, 2, 3}
console.log(map1.entries());//{'k1' => 1, 'k2' => 2, 'k3' => 3}
map1.forEach((value, key) => {
console.log(key + ":" + value) //k1:1 k2:2 k3:3
})
</script>
第三个参数map函数中this指向问题
第三个参数,map函数中this指向的对象
该参数是非常有用的,我们可以将被处理的数据和处理对象分离,将各种不同的处理数据的方法封装到不同的的对象中去,处理方法采用相同的名字。
在调用Array.from对数据对象进行转换时,可以将不同的处理对象按实际情况进行注入,以得到不同的结果,适合解耦。
这种做法是模板设计模式的应用,有点类似于依赖注入。
<script>
let diObj = {
handle: function (n) {
return n + 2
}
}
console.log('%s', Array.from(
[1, 2, 3, 4, 5],
function (x) {
return this.handle(x)
}, diObj))
</script>
class类
class类的基础调用和结构 class 类的继承问题
<script>
class Student {
// 构造函数实现初始化
constructor(name, sex, age) {
this.name = name,
this.sex = sex,
this.age = age
}
// 行为:方法(函数)来实现
chi() {
console.log("吃饭")
}
shui() {
console.log("睡觉")
}
setHello() {
console.log(`我叫${this.name}是一名${this.sex}生,今年${this.age}岁`)
}
getName() {
return this.name
}
cal(n, m) {
console.log(n + m)
}
}
let p0 = new Student("邵文潇", "男", 20)//赋值
//调用
p0.chi()
p0.shui()
p0.setHello()
console.log(p0.getName())
p0.cal(1, 2)
</script>
class 类的继承问题
<script>
class Student {
// 构造函数实现初始化
constructor(name, sex, age) {
this.name = name,
this.sex = sex,
this.age = age
}
chi() {
console.log("吃饭")
}
shui() {
console.log("睡觉")
}
setHello() {
console.log(`我叫${this.name}是一名${this.sex}生,今年${this.age}岁`)
}
getName() {
return this.name
}
cal(n, m) {
console.log(n + m)
}
}
let p0 = new Student("邵文潇", "男", 20)
// 继承 class Person(子类) extends Student(父类)
class Person extends Student {
// 当子类继承了父类,那么子类就可以访问父类中的属性,函数
// 子类使用的构造器constructor 的时候必须使用
constructor(name, sex, age, stuid) {
super(name, sex, age) //必须现调用一下super()函数
this.stuid = stuid
}
}
let stu = new Person("张三", "女", "20", "1001")
// 当父类和子类中有相同名称的函数时,调用的时子类中的函数,这就相当于子类将父类中的同名函数进行了重写
stu.chi()
console.log(stu.name)
</script>