03_ES6

2023-10-27

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

03_ES6 的相关文章

  • 单击输入[复选框]的标签将触发父级单击事件两次(淘汰)

    考虑这把小提琴 http jsfiddle net 9rkrahm6 我有一个
  • dojo dijit.form.DateTextBox 约束不起作用,datetextbox

    嗨 我是 javascript 和 dojo 的新手 我正在尝试使用两个带有下拉日历的 dijit DateTextBox 来建立数据库查询的日期范围 一旦选择了开始日期或结束日期 我想限制可用的日期 以便不可能选择按时间顺序排列在开始日期
  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • 解决:VSCode Win10 激活conda环境时报错 CommandNotFoundError

    错误如下 conda activate data science CommandNotFoundError Your shell has not been properly configured to use conda activate
  • git架构设计

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 管理的是修改 而不是文件 参考 https www liaoxuefeng com wiki 0013739516305929606dd18361248578c67b806
  • java 检查版本号大小

    apk开发过程中 需要比较版本号大小 判断是否需要升级 一个版本号 Firmware Version 6 3 148 0 我的做法是先提取数字 保存为List
  • 通讯协议001——Modbus报文协议分析

    Modbus协议存在用于串口 以太网 专用网络的版本 各版本的Modbus通信协议在数据模型和功能调用上都是相同的 只有封装方式和一些细节有所不同的 本文对Modbus RTU报文协议进行分析 Modbus数据帧格式如下 1 从站地址 地址
  • 华为服务器查看内存信息,服务器查看内存工具

    服务器查看内存工具 内容精选 换一换 numactl工具可用于查看当前服务器的NUMA节点配置 状态 可通过该工具将进程绑定到指定CPU core 由指定CPU core来运行对应进程 命令参考举例 以CentOS为例 使用如下命令安装 从
  • BUAA(2021春) 北京地铁乘坐线路查询——Dijkstra和Floyd双解法

    BUAA数据结构第七次编程题 北京地铁乘坐线路查询 看前须知 第七次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 补充测试的数据 最短路径算法小拓 看前须知 要点介绍和简要声明 第七次上机题
  • oracle 基本操作

    1 给表加注释 comment on table 表名 is 注释
  • ald计算机应用,ALD 文件扩展名: 它是什么以及如何打开它?

    ALD 疑难解答 打开 ALD 文件的问题 Microsoft Dynamics AX 未安装 双击你的 ALD 文件会提示消息 os 无法打开 ALD 文件 如果是这样 这通常意味着你没有为 os 安装 Microsoft Dynamic
  • 资讯汇总230330

    230330 21 50 农业农村部部署防御大风降温雨雪天气工作 农业农村部网站消息 据中国气象局预计 3月30日夜间至4月5日 较强冷空气将自西向东影响我国 新疆北部 内蒙古中东部最低气温降至 12 3 甘肃 山西 陕西部分山区气温降至0
  • pytdx 获取板块指数_是否可以获得板块指数8806XX成分股?

    这些就是 数据文件中有 hq cache tdxzsbase cfg 我从通达信金融终端行情软件中 Level 2版 华泰证券的免费的券商版也可以看到 8806xx的板块名称和8804xx的有重复的 但是成分股不一样 yutiansut 油
  • LightPicture精致图床PHP系统源码+功能强大

    正文 高性能 精致 扁平化 多样化储存式的企业化图床程序 支持第三方云储存 本地 阿里云 OSS 腾讯云 COS 七牛云 支持多桶储存 可同时添加多个对象存储桶管理 多图上传 拖拽上传 粘贴上传 上传预览 全屏预览 一键复制图片外链 多用户
  • Bootstrap Select使用

    阅读目录 一 组件开源地址以及API说明 二 组件效果示例 三 使用示例 1 基础示例 2 其他效果示例 3 组件取值赋值 4 组件其他用法 5 组件封装 四 源码下载 五 总结 正文 前言 之前分享过两篇bootstrap下拉框的组件 J
  • 测试篇(一):需求、BUG、测试用例、开发模型和测试模型、配置管理和软件测试

    目录 一 什么是需求 1 1 需求的概念 1 2 用户需求 1 3 软件需求 二 什么是测试用例 2 1 测试用例的概念 三 什么是BUG 3 1 BUG 软件错误 的概念 四 开发模型 4 1 软件生命周期 4 2 瀑布模型 4 3 螺旋
  • 【前端】CSS垂直居中的7种方法

    文章目录 line height 绝对定位 margin auto flex 绝对定位 margin 负值 定位 transform vertical align middle display table cell 思维导图 前文 前端 C
  • Unity使用拓展方法设置和获取Transfrom信息

    在项目开发中经常需要保存场景中物体的旋转 位置 大小 为了每次保存成统一的格式方便复用 给Transfrom加入设置和获取的拓展方法 关于拓展方法的可以推荐 拓展方法 这篇文章 下面是改功能的实现 using System using Sy
  • “射同余异”或“射同基反”?揭秘三端式正弦波振荡器

    射同余异 或 射同基反 揭秘三端式LC正弦波振荡器 一 我们都知道rc文氏桥振荡器属于低频振荡器 产生的正弦波频率极限为1Mhz 要产生1Mhz以上的震荡频率我们可以采用LC正弦波振荡器 因此我们自然会想到由变压器耦合式的振荡器如图 该振荡
  • Vant 2 - 移动端 Vue 组件库 _ 问题记录

    目录 基础组件 Popup 弹出层 表单组件 DatetimePicker 时间选择 Field 输入框 Form 表单 Picker 选择器 Radio 单选框 Uploader 文件上传 展示组件 List 列表 导航组件 Tab 标签
  • Field

    Field f Counter class getField count 拿到Counter类的count 实例域 Counter c new Counter 一个Counter对象实例 Long l Long f get c 拿到对象实例
  • Windows系统安装Java开发环境配置

    一 下载Java Development Kit JDK JDK 是一个用于开发和测试 Java 编程语言编写的程序的软件开发环境 它包括在 Windows macOS 或 Linux 平台上构建 运行和调试应用所必需的工具和资源 下载地址
  • 03_ES6

    ES6 在js中进行操作 使用var声明变量的弊端 var 声明的变量有预解析 造成逻辑混乱 可以先使 后声明 undefined var 可以重复定义同 个变量 第二个会修改变量的值 var 在 for 循环条件中 造成 for 循环的污