ES6-ES11笔记(1)

news2024/11/16 7:40:29

关于这个视频的笔记
(https://www.bilibili.com/video/BV1uK411H7on?p=29&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)

1.ES6

1.1let的一些注意点

let a;
let b,c,d;
let e = 100;
let f="你好",g=101;

// 变量名不能重复声明
// let testDepulicate = 123456
// let testDepulicate = 789;

// var是可以重复声明的
// var testDepulicate = 123456
// var testDepulicate = 789;

// let 是块级作用域  var是全局作用域
/*
{
    let test01 = 123
}
console.log(test01); //报错test01 is not defined
*/
/*
{
    var test01 = 123
}
console.log(test01);  //正常运行
 */


// 不允许变量提升, 简单来说,声明之前不能使用, var是可以的
console.log(test02);
let test02 = 'adfa'  //Cannot access 'test02' before initialization


1.2const 常量的一些注意点

在这里插入图片描述

1.3 变量的解构赋值

数组的解构赋值
个人理解:对数组里面的值单独定义一个变量名
在这里插入图片描述
对象的解构赋值
个人理解:对象里面的值单独定义一个变量名在这里插入图片描述

1.4 模板字符串

// 用反引号 定义
let str = `我是模板字符串`
console.log(str);

//可以出现换行符
let str2 = `我是模板
123字符串`
console.log(str2);

// 变量拼接
let test01 = '123haod'
let test02 = `${test01}拼接了`
console.log(test02);

1.5对象的简化写法

let name1 = '米粒'
let show = function(){
    console.log("show time");
}

let user = {
    name1,
    show,
    //简化方法声明
    learn(){
        console.log("学习");
    }
}
console.log(user);
console.log(user.show());
console.log(user.learn());

1.6箭头函数

<script>
    let testf1 = function(name){
    console.log(`my name is ${name}`);
}

let testf2 = (name)=>{
    console.log(`my name2 is ${name}`);
}

testf1('a')
testf2('好人')

// 1.this 是静态的,this始终指向函数声明的所在作用域下的this的值

let testf3 = function(){
    console.log(this.name); 
}

let testf4 = ()=>{
    console.log(this.name);
}
window.name='全局的name'
const school={name:'学校名字'}

//直接调用
testf3()
testf4()

//call 调用
testf3.call(school) //学校的名字  js原本的this,谁调用,this就指向谁
testf4.call(school) //this 函数声明时候 所在的作用域


// 2. 不能作为构造实例化对象
let Person = (name,age)=>{
    this.name = name,
    this.age = age
}
// let me = new Person('Ray',18)
// console.log(me); //报错Person is not a constructor

//3. 不能使用arguments变量

let testf5 = function(){
    console.log(arguments); 
}

let testf6 = ()=>{
    console.log(arguments);  
}
testf5('1',2,3)
// testf6('1',2,3)  //报错,箭头函数不能使用arguments

//4.箭头函数的简写,只有一个参数括号可以简写, 
//当代码体只有一句话时候,可以省略花括号{},而且return也要省略,默认作为return的返回值

let testf7 = n=> console.log(n);  
testf7(11)
</script>

箭头函数的应用场景

setTimeout() 函数的this指向的是window,但是使用箭头函数可以让this指向箭头函数声明的时候的作用域

setTimeout(()=>{
this.xxxx
})
在这里插入图片描述
在这里插入图片描述

1.6.1箭头函数 箭头函数的注意点

箭头函数适合与this无关的回调,定时器,数组的方法回调
箭头函数不适合this有关的回调, 比如事件回调,对象的方法

在这里插入图片描述

1.7函数默认值

function f (a,b,c=10){
    console.log(a+b+c);
}
f(1,2,3)
f(1,2)

//与解构赋值结合
function connect({host='127.0.0.1',name,port}){
    console.log(host);
    console.log(name);
    console.log(port);
}

connect({
    // host:"1.2.3.4",
    name:"rott",
    port:"3306"
})

1.8 rest参数

// es5的用法
function test01(){
    console.log(arguments); //arguments是一个对象
    console.log(typeof arguments);
}

test01('参数1','参数2','参数3')

//用es6 rest参数方式,需要放到最后一个参数
// function test02(a,...args,b){} //args需要放到最后一个参数
function test02(...args){
    console.log(args); //是一个数组
    console.log(typeof args); //数组也是返回object,而复杂数据类型里,除了函数返回了"function"其他均返回“object”
    console.log(args.constructor===Array); //判断是否是数组
}

test02('参数1','参数2','参数3')

1.9拓展运算符

拓展运算符,能将数组转为逗号分隔的参数序列

const tfBoys=['boy01','boy02','boy03']
console.log(tfBoys);
console.log(...tfBoys);

function showBoys(){
    console.log(arguments);
}

showBoys(tfBoys) //[Arguments] { '0': [ 'boy01', 'boy02', 'boy03' ] }
showBoys(...tfBoys)//[Arguments] { '0': 'boy01', '1': 'boy02', '2': 'boy03' }

1.9.1拓展运算符的运用

<body>
    <div></div>
    <div></div>
    <div></div>
</body>
<script>
    // 1. 数组的合并
const array01=['a1','a2','a3']
const array02=['a4','a5','a6']

// es5的做法
const array04=array01.concat(array02)
console.log(array04);

//es6的做法
const array03=[...array01,...array02]
console.log(array03);

//2.数组的克隆
const array05= ['a','b','c']
const array06= [...array05]  //如果有引用,那么是浅拷贝
console.log(array06);

//3.将伪数组转为真的数组
const object01=document.querySelectorAll('div')
console.log(object01);
const array07 = [...object01]
console.log(array07);
</script>

1.10Symbo的基本使用

在这里插入图片描述

let s = Symbol();
console.log(s,typeof s);

// 参数只是一个标志,值是不一样的,所以是false
let s2 = Symbol('张三');
let s3 = Symbol('张三');
console.log(s2===s3);//false

//用for创建,那么相当于描述字符串指定一个值,那么对比值就是true
let s4 = Symbol.for('李四')
let s5 = Symbol.for('李四')
console.log(s4===s5);//true

//symbol不能进行数据运算,比较,计算

//js数据类型
//USONB you are so niubility 记忆
//U undefined
//S String,Symbol
//O object
//N number,null
//B boolean

1.10.1Symbol创建对象属性

<script>
// 1.防止对象里的属性重名
let game={
    up:function(){
        console.log('game up');
    },
    down:function(){
        console.log('game down');
    }
}
let methods={
    up:Symbol(),
    down:Symbol()
}
game[methods.up]=function(){
    console.log("methods - up");
}

game[methods.down]=function(){
    console.log("methods - down");
}
//这样就实现了对象里面添加其他方法,又不会重名

console.log(game);
console.log(game.up);

console.log('---------------');
let game2={
    //第二种定义方法
    [Symbol('up')]:function(){
        console.log("up---------");
    }
}
console.log(game2);
</script>

1.10.2Symbol常用的内置属性

1.10.2.1 Symbol.hsInstance
在这里插入图片描述
1.10.2.1 Symbol.isConcatSpreadable
在这里插入图片描述
在这里插入图片描述

1.11迭代器

在这里插入图片描述
在这里插入图片描述

1.11自定义对象迭代器

let myClass={
    name:"super man class",
    stu:[
        '超人',
        '钢铁侠',
        '绿巨人'
    ],
    [Symbol.iterator](){
        let index=0;
        let _this = this;
        return {
            next: function(){
                if(index<_this.stu.length){
                    return {value:_this.stu[index++],done:false}
                }else{
                    return {value:undefined,done:true}
                }
            }
        }
    }
}

// for (let item of myClass.stu) {
//     console.log(item);
// }

//[Symbol.iterator]()自定义这个之后,就可以了遍历自定义的遍历
for (let item of myClass) {
    console.log(item);
}

1.12生成器

生成器是一个特殊的函数
异步编程新的解决方案

1.12.1生成器初步使用

function * gen(){
    console.log("hello generator");
}

function * gen2(){
    console.log("hello generator2");
}

// 加入yeild "暂停点"
function * gen3(){
    console.log("111");
    yield "第一个暂停点"
    console.log("222");
    yield "第一个暂停点"
    console.log("333");
    yield "第一个暂停点"
    console.log("444");
}

let r1 = gen();
r1.next(); //用next才能执行

let r2 = gen2();
r2.next();//用next才能执行

// let r3 = gen3();
// r3.next();//用next才能执行
// r3.next();//用next才能执行
// r3.next();//用next才能执行
// r3.next();//用next才能执行
// r3.next();// 空的没执行,因为已经全部执行完了

let r3 = gen3();
console.log(r3.next());//输出yield
console.log(r3.next());//输出yield
console.log(r3.next());//输出yield
console.log(r3.next());//输出yield
console.log(r3.next());//输出yield

//遍历
// for (const v of gen3()) {
//     console.log(v); //输出yield内容
// }
for (const v of r3) {
    console.log(v);
}

1.12.2生成器参数使用

function * gen(args){
    console.log(args);
    let one = yield 111;
    console.log(one)
    let two = yield 222;
    console.log(two);
    yield 333;
}

let iterator = gen('AAA');
console.log(iterator.next()) //第一次参数,调用next() args
console.log(iterator.next('BBB'))//第二次调用next,会作为第一个业务代码整体返回的结果
console.log(iterator.next('CCC'))//第三次调用next,会作为第二个业务代码整体的返回结果
console.log(iterator.next())
console.log(iterator.next())


1.12.3生成器和异步编程

//需求,一秒后输出111,然后两秒后输出222,三秒后输出333
//传统的异步编程,当足够多时候,会出现"回调地狱"现象
// setTimeout(() => {
//     console.log(111);

//     setTimeout(() => {
//         console.log(222);

//         setTimeout(() => {
//             console.log(333);
//         }, 3000);

//     }, 2000);

// }, 1000);


//用iterator
function f1(){
    setTimeout(() => {
        console.log(111);
        iterator.next()
    }, 1000);
}
function f2(){
    setTimeout(() => {
        console.log(222);
        iterator.next()
    }, 2000);
}
function f3(){
    setTimeout(() => {
        console.log(333);
    }, 3000);
}

function * f(){
    yield f1()
    yield f2()
    yield f3()
}
let iterator = f();
iterator.next()

//需求,查询用户,根据用户查询订单,查询商品
//这个案例是有参数作为返回值

//用iterator
function getUser(){
    setTimeout(() => {
        let user = '张三'
        iterator.next(user)
    }, 1000);
}
function getOrder(){
    setTimeout(() => {
        let order = '订单10'
        iterator.next(order)
    }, 1000);
}
function getGoods(){
    setTimeout(() => {
        let good = '商品:芭比娃娃'
        iterator.next(good)
    }, 1000);
}

function * f(){
    let user = yield getUser()
    console.log(user);
    let order = yield getOrder()
    console.log(order);
    let goods = yield getGoods()
    console.log(goods);
}
let iterator = f();
iterator.next()

1.13 Promise

在这里插入图片描述

let p = new Promise(function(resolve,reject){
    setTimeout(() => {
        // let data = '成功的数据'
        // resolve(data) //调用then第一个参数的方法
        let data = '失败的数据'
        reject(data) //调用then第二个参数的方法
    }, 1000);
})
p.then((res)=>{
    console.log(res);
},(err)=>{
    console.error(err);
})

读取文件的一个promise实践

// 读取文件
let fs = require('fs');
//1. 用fs传统方法
// fs.readFile('./测试文件.txt',(err,data)=>{
//     if(err) throw err
//     console.log(data.toString());
// })

//2.用promise改进
let p = new Promise((resolve,reject)=>{
    fs.readFile('./测试文件.txt',(err,data)=>{
        if(err) reject(err)
        resolve(data)
    })
})
p.then(res=>{
    console.log(res.toString());
},err=>{
    console.log(err);
})

1.13.1Promise封装AJAX请求

<script>
/*

//1.创建对象
const xhr = new XMLHttpRequest();
const url = 'https://api.apiopen.top/api/sentences'
// const url = 'https://api.apiopen.top/api/sentences22'//错误
//2.初始化
xhr.open('get',url)
//3.发送
xhr.send()
//4.绑定事件
xhr.onreadystatechange = function(){
    if(xhr.readyState===4){
        if(xhr.status>=200&&xhr.status<=299){
            console.log(xhr.response);
        }else{
            console.error(xhr.status);
        }
    }
}

*/
// ----------------------------------
// 用promise改造
const p = new Promise((resolve,reject)=>{
    //1.创建对象
    const xhr = new XMLHttpRequest();
    const url = 'https://api.apiopen.top/api/sentences'
    // const url = 'https://api.apiopen.top/api/sentences22'//错误
    //2.初始化
    xhr.open('get',url)
    //3.发送
    xhr.send()
    //4.绑定事件
    xhr.onreadystatechange = function(){
        if(xhr.readyState===4){
            if(xhr.status>=200&&xhr.status<=299){
                resolve(xhr.response)
            }else{
                reject(xhr.status);
            }
        }
    }
})
p.then(res=>{
    console.log(res);
},err=>{
    console.log(err);
})
</script>

1.13.3Promise.prototype.then方法

<script>
    const p = new Promise((resolve,reject)=>{
        resolve('成功了')
        // reject('失败了')
    })
    /*
    这里then的返回值有三种
    1.非promise return '123'; //这个就是非promise
    2.promise类型,而且返回值就是返回的promise里面的值
    */
    let result = p.then(res=>{
        console.log(res);
        // return '123'; //这个就是非promise
        //默认没有return 是默认promise
        //下面就是返回promise类型
        return new Promise((resolve,reject)=>{
            resolve('ok')//这个是成功的promose
            // reject('error')//这个是失败的promise
            // throw 'error'
        })
    },err=>{
        console.error(err);
    })
    console.log(result);


    // ----------------
    // 链式调用
    // p.then(res=>{
    //     console.log(res);
    // },err=>{
    //     console.error(err);
    // }).then(res=>{
    //     console.log(res);
    // },err=>{
    //     console.error(err);
    // }).then(res=>{
    //     console.log(res);
    // },err=>{
    //     console.error(err);
    // })
</script>

1.13.4Promise对象catch方法

catch来处理错误的回调

<script>
    const p = new Promise((resolve,reject)=>{
        // resolve('成功了')
        reject('失败了')
    })
    // p.then(res=>{
    // },err=>{
    //     console.error(err);
    // })
    p.catch(err=>{
        console.warn(err);
    })
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无信息变量消除法研究及实现(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 波长变量筛选的方法主要有相关系数法&#xff0c;逐步回归法&#xff0c;无信息变量消除法(UVE)&#xff0c;遗传算法(genetic …

python圣诞树词云

一、前言 圣诞节虽然是西方节日&#xff0c;但是个人还是比较喜欢的&#xff08;没有崇洋媚外的意思&#xff0c;中国的春节也超级棒&#xff09;&#xff0c;一个是圣诞节的氛围&#xff0c;圣诞节的圣诞老人等象征、雪花麋鹿等元素&#xff0c;都充满了浪漫的氛围。我想这也是…

Linux的文件系统编程(1)

What makes the desert beautiful is that somewhere it hides a well. 沙漠之所以美丽,是因为在它的某个角落隐藏着一口井. Linux的文件系统编程&#xff08;1&#xff09;运行过程框架标准IO和文件IO标准IO文件IO(主要学)open函数两个参数三个参数close函数read函数write函数…

Python基础语法(二)

Python基础语法&#xff08;二&#xff09; 函数 编程中的函数和数学中的函数有一定的相似之处. 数学上的函数, 比如 y sin x , x 取不同的值, y 就会得到不同的结果. 编程中的函数, 是一段 可以被重复使用的代码片段 . 代码示例: 求数列的和, 不使用函数 # 1. 求 1 - 100 …

树Tree【代码笔记】

树【Tree】 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 有且仅有一个特定的称为根的结点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互不相交的有限集T1,T2,……

OpenHarmony#深入浅出学习eTs#(六)编写eTs第一个控件

本项目Gitee仓地址&#xff1a;深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、控件基本属性 在使用第一个控件前&#xff0c;我们需要了解一些控件都有哪些基础属性&#xff0c;比如说我们在Super Visual中使用过的长宽和字体大小等等&#xff0c;通用属性有以下这…

Retrofit的使用

文章目录Retrofit的使用最好用的网络库: RetrofitRetrofit的基本用法处理复杂接口的地址类型Retrofit构建器的最佳写法Retrofit的使用 最好用的网络库: Retrofit Retrofit是一款由Square公司开发的网络库,但是它和OkHttp定位完全不同,OkHttp的侧重点是底层通信的实现,而Retro…

Java集合类——LinkedList(单链表及双链表)

一&#xff0c;ArrayList的缺陷 1.空间浪费 在之前的博客中&#xff0c;我利用源码详细的讲解了ArrayList这个集合类&#xff08;尤其是扩容机制&#xff09;&#xff0c;可以知道ArrayList的底层主要是一个动态的可变数组&#xff0c;容量满的时候需要进行1.5倍扩容。但是我…

第二十讲:神州路由器静态路由的配置

实验拓扑图如下所示 设备 端口 IP 子网掩码 网关 Router-A G0/0 120.83.200.55 255.255.255.0 无 G0/3 192.168.0.1 255.255.255.0 无 Router-B G0/0 120.83.200.56 255.255.255.0 无 G0/3 192.168.1.1 255.255.255.0 无 PC1 192.168.0.2 255.255.255…

jQuery 的基本使用

1、jQuery 介绍 1.1、JavaScript 库 JavaScript库&#xff1a;即 library&#xff0c;是一个封装好的特定的集合&#xff08;方法和函数&#xff09;。从封装一大堆函数的角度理解库&#xff0c;就是在这个库中&#xff0c;封装了很多预先定义好的函数在里面&#xff0c;比如动…

【C++】const关键字

【C】const关键字 0x1 常量 C定义常量有两种方式 #define 宏常量&#xff1a;#define 常量名 常量值 通常在文件上方定义&#xff0c;表示一个常量宏常量不可以修改 // 宏常量 #define MAX 999int main() {return 0; }const修饰的变量&#xff1a; const 数据类型 常量名 …

docker 安装Es

1、下载镜像文件 docker pull elasticsearch:7.4.2 存储和检索数据 docker pull kibana:7.4.2 可视化检索数据 2、创建实例 1、ElasticSearch mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "http.host: 0.0.0.0" >…

第三十六章 数论——容斥原理

第三十六章 数论——容斥原理一、容斥原理1、定理内容二、代码模板1、问题&#xff08;1&#xff09;如何求出能够被整除的个数&#xff1f;&#xff08;2&#xff09;如何枚举出2n−12^n-12n−1种情况&#xff1f;2、代码实现&#xff1a;一、容斥原理 1、定理内容 我们在高…

开启微信小程序的学习窗口(第一课)

第一个问题 什么是微信小程序 微信小程序&#xff0c;小程序的一种&#xff0c;英文名Wechat Mini Program&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。 全面开放申请后&#xff0…

Educational Codeforces Round 93 (Rated for Div. 2) K. Lonely Numbers

Problem - C - Codeforces 翻译&#xff1a; 给定一个数组&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;由0到9的整数组成。一子数组&#x1d44e;&#x1d459;,&#x1d44e;&#x1d459; 1,&#x1d44e;&…

R实战 | 置换多元方差分析(以PCoA的PERMANOVA分析为例)

adonis-cover置换多元方差分析&#xff08;Permutational multivariate analysis of variance&#xff0c;PERMANOVA&#xff09;&#xff0c;又称非参数多因素方差分析&#xff08;nonparametric multivariate analysis of variance&#xff09;、或者ADONIS分析。它利用距离矩…

第003课 - 分布式基础概念

文章目录 集群、分布式、节点远程调用负载均衡服务注册/发现和注册中心服务熔断和降级API网关我们以前将所有的代码、页面、sql语句,写到一个应用,如果有一个地方有问题,整个就不可用了。 我们可以基于业务边界进行服务微化和拆分。 如果有一个出现了问题,不影响其他服务…

迅为LS2K0500开发板龙芯全国产处理器LoongArch架构核心主板

全国产开发板&#xff1a; 迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器&#xff0c;基于龙芯自主指令系统&#xff08;LoongArch&#xff09;架构&#xff0c;片内集成64位LA264处理器核、32位DDR3控制器、2DGPU、DVO显示接口、两路PCle2.0、两路SATA2.0、四路USB2.0、一路US…

梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解

相关文章 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解 文章目录相关文章前言一、回归拟合问题二、损失函数三、梯度下降算法四、随机梯度下降算法五、动量随机梯…

国际山岳日,周大福百年承诺续写永恒美好

纵横古今&#xff0c;俯瞰万里 每一寸绿野都孕育万物生机 每一座山林都彰示生命之本 百周年承诺 守护自然生态 周大福珠宝集团坚守“用真诚让幸福永恒“的企业理念 我们的百周年承诺包括对地球真诚且有效的付出服务 致力守护珍贵的大自然环境&#xff0c;为人类和星球幸福…