03_ES6

news2024/11/17 12:55:28

ES6(在js中进行操作)

使用var声明变量的弊端

  1. var 声明的变量有预解析,造成逻辑混乱,可以先使⽤,后声明,undefined

  2. var 可以重复定义同⼀个变量,第二个会修改变量的值

  3. var ⽤在 for 循环条件中,造成 for 循环的污染的问题

  4. var 声明的变量没有块级作⽤域

let关键字

声明变量

语法:

let  变量名=变量值

好处:

1.变量只能先声明再使用

2.声明的变量不能重复使用

3.let在for循环中不会造成for循环的污染

4.变量存在块级作用域

    <script>
        //不能先使用再声明
        // console.log(name2);
        let name2 = 2;
        //不能声明多个同名变量
        for (let i = 0; i < 3; i++) {
            console.log(i);
        }
        name1 = "后悔"
        //不能在作用域外访问
        //console.log(i);

        //有块级作用域
        {
            let name2="huihui"
            console.log(name2);
        }
        window.onload = function () {
            let btns = document.querySelectorAll(".btn");
            for (let i = 0; i < btns.length; i++) {
                btns[i].onclick = function () {
                    console.log(i);
                }
            }
        }
    </script>

const关键字

声明只读的常量,不可变

格式

const 变量名 =;

在java中使用的是finnal关键字

具备的特点:

1.一旦声明就必须赋值

2.赋值之后不能被修改

3.常量的作用域和let的作用域相同

4.没有预解析

5.引用类型的值可以被修改

<script>
    const name = "huihiui";
    //常量的值不能修改
    console.log(name);
    const names = [2, 3];
    //引用类型,可以修改对象的值
    names[0] = 4;
    //有块级作用域
    if (1) {
        const age = 10;
        console.log(age);
    }
    console.log(age);
</script>

模板字符串

拼接字符串,使代码可读性更好

格式

let str=`固定字符${变量或者表达式}`;
console.log(`我是${name},今年${age},性别为${gender}`);

解构语法

数组使用的方括号进行包裹

对象使用的是大括号进行包裹

对象解构

这种类型的解构使用的频率较多,有多个参数时使用

1.变量名和对象的属性名必须一致

let obj = {
    name: "张三",
    age: 20,
}
let {name, age} = obj;
console.log(name, age);

2.可以重新声明变量名

let {name: myname} = obj;
console.log(myname);

3.内置对象的简化

let {random}=Math;
console.log(fandomF()F)
数组解构

​ 使用次数较少,用于获取数组中的元素

注意:里面的变量值和数组的索引有关,与变量的顺序无关

1.取所有的元素

let  arr=[1,2,3,4]
let  [a,b,c,v]=arr;
console.log(a,b,c,v);

2.不连续取元素,使用,进行占位

let [,,c,d] =arr;
console.log(c,d);//只获取最后两个元素

3.取二维数组的值

let arr2=[1,2,[3,4]];
let [a,b,[c,d]]=arr2;
console.log(a,b,c,d);
字符串解构

​ 使用的频率更少,用于获取字符串中的字符

let str="skldj";
let [a,b,c]=str;
console.log(a,b,c);//只获取前三个字符
应用场景

​ 交换两个变量的值

let a=1,b=2;
[a,b]=[b,a];
console.log(a,b);
对象的简写

​ 当对象的属性名,和值的变量名一致的时候,可以进行简写

let url=" ",type="",data="",success=functionF(){}
$(function{
	$.ajax(
		url,
		type,
		data,
		success()
	)
})
函数参数默认值

​ 若传进来的参数的值为undefined,没有设置默认值计算的时候就会出现NaN

格式

funciton 函数名(参数=默认值){ 
 
}

当传进来的参数时undefined时 就会将参数组的值设置为默认值0

function fun(a=0,b=0,c=0){
	reture a+b+c
}
console.log(fun(1, 2, 3));
console.log(fun());
函数参数的解构

​ 对传进来的参数进行解构,数组使用[],对象使用{}

1.对象参数的解构

function fun({name,age}){
		console.log(name,age);//获取属性值
}
fun({name:"张三",age:20});

2.数组的参数解构

function fun2[(a,b,c]){//里面的参数只和数组的索引有关
console.log(a,b,c);
}
fun2([1,3,2,5])
对象解构参数的默认值

​ 对象没有传参数会造成undefined,报错

​ 设置默认值:赋值一个空对象,并向空对象里面添加默认的值

function fun({name="灰灰",age=20}={}){
		console.log(name,age);
}
fun({name="穆棱",age=25});//结果就是  穆棱  25
fun(); //结果就是  灰灰  20
rest(剩余)参数

搭配的变量就是一个数组,将多艺的参数放在数组中

…rest只能放在参数的最后,名字可以随便定义,作用和java中的可变参数一样

function fun(a,b,...rest){
	console.log(arguments);//只能获取所有的实参
	console.log(a);//获取索引为0的值
    console.log(rest);//获取后面所有的元素	
}
fun(1,2,3,4)
function fun(...rest){
	console(rest);//作用和arguments的作用一样,取得传进来的所有元素
}
fun(1,2,5);
扩展运算符

1.使用"…rest"将数组中的元素拆分打印

let arr=[1,2,3];
console.log(...arr);//将arr进行拆分

​ 2.对象合并对象方式一(添加属性)

​ 合并的时候,同名的属性会覆盖前面的

​ 不能使用console.log(…obj)取对象的属性值

let obj={name:"张三",age:20};
let  obj2={email:"xxxx",...obj}//使用...obj的方式取所有的属性

​ 3.对象合并对象方式二(添加一个对象),关键字"Object.assign"

​ 这种方式会改变原有的对象的结构,需要使用空对象进行添加,这样才能合并对象

let obj={name:"张三",age:20};
let obj2={address:"四川",email:223};
let  obj3={}
Object.assign(obj3,obj1,obj2);

​ 4.数组类型

   function fun(a,b,c){
       console.log(a, b, c);
   }
   fun(...arr);
扩展运算符在解构中的使用
let arr=[1,2,3]

let [a,...b]=arr

console.log(a)

console.log(b)

箭头函数

​ **作用:**对匿名函数的简化,只能使用在匿名函数,有匿名函数的地方就使用箭头函数

形式1,省略function

    let fun3=()=>{}
    let fun4=(a,b)=>{
          console.log(a, b);
      }

形式二,只有一个形参可以省略()

let fun5=a=>{
    console.log(a, b);
}

形式三,函数只有一条语句,可以省略{}

let fun6 = a =>  console.log(a);

形式四,只有一条语句,并且返回结果,省略return

let fun7=(a,b)=>a+b;

Promise对象

使用前引用jQuery文件

作用:

避免回调地狱的情况出现,将异步代码改成像同步代码,方便后期的维护

三种状态

不在成功和失败状态,初始状态是pending

成功时交给一个人处理,状态是fulfiled

失败时就交给另一个人处理,状态是rejected

promise特点

1.对象状态不受外界的影响,只有异步操作的结果可以决定是哪一个状态

2.状态一旦改变,就不会再变,任何时候都可以得到这个结果

回调函数

在这里插入图片描述

promise的基本语法

使用then链式特点

​ 1.第一个then执行后会执行第二个then

​ 2.then中的返回值会被下一个then进行接收

​ 3.若返回的是promise对象,里面是对象内部调用resolve的实际参数

<script>
    //初始化promise
    Promise p=new Permise();
	$.ajax({
        url:"../a/a.json",
        success(data){
            resolve(data);//初始状态到成功状态
        },
        error{
        reject(data);//初始状态到失败状态
    }
    });
    p.then(data=>{
        console.log("处理成功之后的业务")
    }).catch(data=>{//使用链式语法
         console.log("处理失败的业务")
    })
</script>

使用promis解决回调地狱问题

此处没有处理回调失败的结果

步骤:

​ 1.创建promise对象

​ 2.在对象里面写一个ajax请求

​ 请求成功就执行resolve()方法

​ 请求失败执行reject()方法

​ 3.接着调用promise对象的then方法

​ 4.使用链式语法的时候需要返回第二个promise对象

<script src="../js/jquery-2.1.4.js"></script>
<script>
  //发送三个请求
  let p1 = new Promise((resolve,reject)=>{
    $.ajax({
      url:'../data/a.json',
      success(res){
        resolve(res)
      },
      error(err){
        reject(err)
      }
    })
  })
//p2和p3的写法和p1相同
  let p2 = new Promise((resolve,reject)=>{
  ......
  })
  let p3 = new Promise((resolve,reject)=>{
    ......
    })
  })
  //依次处理请求成功之后的业务
  //使用链式语法的话需要返回后面的对象
  p1.then(data=>{
    console.log("处理第一个请求成功之后的业务");
    return p2;
  }).then(data=>{
    console.log("处理第二个请求成功之后的业务");
    return p3;
  }).then(data=> {
    console.log("处理第三个请求成功之后的业务");
  })
</script>

Promise常用的方法

1.all方法
//发送三个请求
let p1 = new Promise((resolve,reject)=>{
  $.ajax({
    url:'../data/a.json',
    success(res){
      resolve(1)
    },
    error(err){
      reject(1)
    }
  })
})
let p2 = new Promise((resolve,reject)=>{
  ...
})
let p3 = new Promise((resolve,reject)=>{
  ....
})
//all方法,传进来的是数组
Promise.all([p1,p2,p3]).then(data=>{
    console.log("全部成功");
    console.log(data,"--------------------");
}).catch(data=>{
    console.log("有失败的请求");
    console.log(data,"======================");
})

全部成功就返回成功,将所有的对象的返回值组成数组,传递给回调函数

有一个失败返回失败,将第一个失败的返回值传递给回调函数

在这里插入图片描述

2.rece方法
//发送三个请求
let p1 = new Promise((resolve,reject)=>{
  $.ajax({
    url:'../data/a.json',
    success(res){
      resolve(1)
    },
    error(err){
      reject(1)
    }
  })
})
let p2 = new Promise((resolve,reject)=>{
  ...
})
let p3 = new Promise((resolve,reject)=>{
  ....
})
 Promise.race([p1,p2,p3]).then(data=>{
        console.log("全部成功");
        console.log(data,"--------------------");
    }).catch(data=>{
        console.log("有失败的请求");
        console.log(data,"======================");
    })

​ 除了第一个的实例发生变化会出现失败,其他的实例发生变化都会打印成功,并且将第一个p的返回值给了回调函数

情况1
在这里插入图片描述

情况2

在这里插入图片描述

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

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

相关文章

【八股】【C++】(三)STL

这里写目录标题 STL定义一、容器概念&#xff08;1&#xff09;vector如何避免扩容导致效率低为什么是1.5或2扩容怎么找某vector或者list的倒数第二个元素vector如何释放空间[] 下标检查 &#xff08;2&#xff09;deque&#xff08;3&#xff09;stack&#xff08;4&#xff0…

如何通过Python下载GSMap数据集(解决.dat无法打开的问题)?

目录 01 前言 02 GSMap-MVK的存储方式和数据集介绍 03 代码实现 01 前言 这么晚了我还是希望将这篇博客写一下&#xff0c;记录生活。 我所下载的数据集为GSMap-MVK数据集&#xff0c;延迟大概2.5月左右我记得.边下载我就想着先处理着吧。 例如&#xff0c;其中一个文件如…

HOT38-翻转二叉树

leetcode原题链接&#xff1a;翻转二叉树 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;…

华为OD机试真题B卷 Python 实现【小朋友排队】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 小明今年升学到了小学1年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于每个小朋友和自己的身高差&#xff…

postgresql内核分析 spinlock与lwlock原理与实现机制

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 在postgresql 中&#xff0c;有大量的并发同步&#xff0…

浅谈容器技术之Podman

1.Podman容器简介 Podman&#xff08;Pod Manager&#xff09;是一个由RedHat公司推出的容器管理工具&#xff0c;它的定位就是 Docker 的替代品&#xff0c;在使用上与Docker 的体验类似。Podman源于CRI-O项目&#xff0c;可以直接访问 OCI 的实现&#xff08;如 runC&#x…

【Unity实战】复刻实现经典2d平台跳跃游戏《蔚蓝 Celeste》(附工程源码)

文章目录 前言蔚蓝欣赏实现1. 移动2. 跳跃3. 滑动4. 爬墙5. 蹬墙跳6. 移动优化7. 粒子效果8. 角色环境素材9. 编写角色动画控制10. Tilemap绘制地图环境11. 环境粒子特效12. 冲锋残影效果13. 屏幕震动效果14. 涟漪效果 最终效果工程源码参考完结 前言 《蔚蓝》是一款备受好评的…

信号与系统复习笔记——通讯系统

信号与系统复习笔记——通讯系统 复指数与正弦幅度调制 y ( t ) x ( t ) c ( t ) y(t) x(t)c(t) y(t)x(t)c(t) 上式称为调制&#xff0c;其中 x ( t ) x(t) x(t) 称为 调制信号 &#xff0c;而 c ( t ) c(t) c(t) 称为 载波信号 &#xff0c; y ( t ) y(t) y(t) 称为 已…

Redis高可用(主从复制、哨兵模式和Cluster集群)

文章目录 一、Redis高可用1.持久化2.主从复制3.哨兵4.Cluster集群 二、主从复制1.概念2.作用3.主从复制流程4.配置主从复制 三、哨兵模式1.功能2.作用3.组成4.故障转移机制7.故障模拟8.恢复故障节点 四、Cluster群集1.简介2.作用&#xff08;1&#xff09;数据分区&#xff08;…

Redis常用数据类型

Redis 哈希(Hash)&#x1f349; Redis hash 是一个 string 类型的 field&#xff08;字段&#xff09; 和 value&#xff08;值&#xff09; 的映射表&#xff0c;hash 特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对&#xff08;40多亿&#xff09; 它…

如何动手用js自己写一个分页?

实现效果 实现代码 function generateTableHead() {const tableHead document.getElementById(table-head);tableHead.innerHTML ;// 添加复选框列的表头const checkboxHead document.createElement(th);const checkbox document.createElement(input);checkbox.type che…

项目部署

#修改表的编码 alter table t_course convert to character set utf8 show create table t_course启动docker&#xff1a; service docker startdocker创建redis设置密码&#xff1a; docker pull redis docker run --name my-redis -p 6379:6379 -e REDIS_PASSWORD<pass…

【大数据趋势】7月2日 汇率,美澳,恒指期货的大数据趋势概率分析。

数据源头之一 : 汇率变化 从程序模拟趋势来看&#xff0c;如果没有干预&#xff0c;极大概率要试探顶部7.375的位置。【位置1】从长期趋势来看&#xff0c;在一个上升通道中长期震荡上行&#xff0c;所以正常应该走2.2的路径【趋势2.2】 因为这轮上涨的动能很大&#xff0c;所…

join on 后面的and 与where 的区别及用法

--- 先把数据导入数据库 CREATE TABLE test_join_where_a ( aid int(0) NOT NULL, aname varchar(255) , atimedate datetime(0) , ascore varchar(255) ); INSERT INTO test_join_where_a(aid, aname, atimedate, ascore) VALUES (1, 张三, 2023-05-03 01:13:30, 8…

环境变量的配置

在我上一篇文章中有写到&#xff0c;在编译和运行Hello World这个文档的时候要使用java.c和java这俩个工具&#xff0c;但是我们却没有转换到这俩个工具所在的磁盘位置&#xff0c;而是直接调用了&#xff0c;那么是怎么实现这一功能的嘞&#xff0c;就有下面的理解 首先wine打…

Linux--给指令起别名:alias

示例&#xff1a;给ls-al起了个别名叫kk​ 注意&#xff1a;起别名只在本次登录有效。

Python爬虫-某政务网站文档爬取,并将正文内容保存在word

前言 本文是该专栏的第1篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cDovL3d3dy5oZWJlaS5nb3YuY24vc2VhcmNoL3BjUmVuZGVyP3BhZ2VJZD1iOTdhMzg4MzNmNzM0M2NlYmMzMWRlYzQ0NTQ0ZjY4NA== 需求:以某政务网网站为例,采集其正文内容,并将其正文内容以docx格式保…

借助APlayer、MetingJS实现 网页音乐播放器

借助APlayer、MetingJS实现 1、src/publi/index.html引入 <script src"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src"https://cdn.jsdelivr.net/npm/meting2.0.1/dist/Meting.min.js"></scri…

离线安装ffmpeg源码包【详细教程】

今天分享一下ffmpeg源码包的安装过程&#xff0c;针对在没有网络环境下&#xff0c;且不能直接使用yum如何成功安装ffmpeg源码包。博主本人通过正式服务器测试&#xff0c;记录整个安装过程。值得大家收藏 同时&#xff0c;我会分享一下如何使用ffmpeg对H.264格式视频(MP4)进行…

echarts数据可视化模板相互影响

问题 echarts数据可视化模板相互影响 详细问题 echarts数据可视化模板相互影响,笔者使用由CSSJavaScriptHTML实现的echarts数据可视化模板&#xff0c;对于其中的子图(图A&#xff0c;位于boxA.js下与图B位于boxB.js下)进行数据下钻&#xff0c;更改option配置后&#xff0c…