ES6——知识点记录

news2025/1/9 15:49:27

这里写目录标题

  • 1.字符串支持
          • 1.codePointAt——根据字符串码元的位置得到其码点
          • 2.includes——判断字符串中是否包含指定的子字符串
          • 3.startsWith——判断字符串中是否以指定的字符串开始
          • 4.endsWith——判断字符串中是否以指定的字符串结尾
          • 5.repeat——将字符串重复指定的次数,然后返回一个新字符串
          • 6.模板字符串
  • 2.函数
        • 2-1. 参数默认值
          • 使用
          • [扩展]对arguments的影响
          • [扩展]留意暂时性死区
        • 2-6. 箭头函数
            • 使用语法
            • 注意细节
            • 应用场景
  • 3.对象Object
        • 3-1. Object的新增API
            • 1. Object.is
            • 2. Object.assign
            • 3. Object.getOwnPropertyNames 的枚举顺序
            • 4. Object.setPrototypeOf
        • 3-2. 类:构造函数的语法糖
            • 传统的构造函数的问题
            • 类的特点
        • 3-3. 类的其他书写方式
            • 1. 可计算的成员名
            • 2. getter和setter
            • 3. 静态成员
            • 4. 字段初始化器(ES7)
            • 5. 类表达式
            • 6. [扩展]装饰器(ES7)(Decorator)
        • 3-4. 类的继承
  • 4.async和await
            • 消除回调
            • async
            • await
        • Promise的基本概念
            • 链式调用规则
            • Promise的静态方法
  • 5.Fetch Api
        • Fetch Api 概述
        • 基本使用
            • 参数
            • 返回值
            • Headers 对象
            • 文件上传
  • 6 新增的数组API
            • 静态方法
            • 实例方法

1.字符串支持

1.codePointAt——根据字符串码元的位置得到其码点
2.includes——判断字符串中是否包含指定的子字符串
3.startsWith——判断字符串中是否以指定的字符串开始
4.endsWith——判断字符串中是否以指定的字符串结尾
5.repeat——将字符串重复指定的次数,然后返回一个新字符串
6.模板字符串

ES6之前处理字符串繁琐的两个方面:

  1. 多行字符串
  2. 字符串拼接

在ES6中,提供了模板字符串的书写,可以非常方便的换行和拼接,要做的,仅仅是将字符串的开始或结尾改为 ` 符号

如果要在字符串中拼接js表达式,只需要在模板字符串中使用${JS表达式}

2.函数

2-1. 参数默认值

使用

在书写形参时,直接给形参赋值,附的值即为默认值

这样一来,当调用函数时,如果没有给对应的参数赋值(给它的值是undefined),则会自动使用默认值。

[扩展]对arguments的影响

只要给函数加上参数默认值,该函数会自动变量严格模式下的规则:arguments和形参脱离

[扩展]留意暂时性死区

形参和ES6中的let或const声明一样,具有作用域,并且根据参数的声明顺序,存在暂时性死区。

2-6. 箭头函数

回顾:this指向

  1. 通过对象调用函数,this指向对象
  2. 直接调用函数,this指向全局对象
  3. 如果通过new调用函数,this指向新创建的对象
  4. 如果通过apply、call、bind调用函数,this指向指定的数据
  5. 如果是DOM事件函数,this指向事件源
使用语法

箭头函数是一个函数表达式,理论上,任何使用函数表达式的场景都可以使用箭头函数

完整语法:

(参数1, 参数2, ...)=>{
    //函数体
}

如果参数只有一个,可以省略小括号

参数 => {

}

如果箭头函数只有一条返回语句,可以省略大括号,和return关键字

参数 => 返回值
注意细节
  • 箭头函数中,不存在this、arguments、new.target,如果使用了,则使用的是函数外层的对应的this、arguments、new.target
  • 箭头函数没有原型
  • 箭头函数不能作用构造函数使用
应用场景
  1. 临时性使用的函数,并不会可以调用它,比如:
  2. 事件处理函数
  3. 异步处理函数
  4. 其他临时性的函数
  5. 为了绑定外层this的函数
  6. 在不影响其他代码的情况下,保持代码的简洁,最常见的,数组方法中的回调函数

3.对象Object

3-1. Object的新增API

1. Object.is

用于判断两个数据是否相等,基本上跟严格相等(===)是一致的,除了以下两点:

  1. NaN和NaN相等
  2. +0和-0不相等
2. Object.assign

用于混合对象

3. Object.getOwnPropertyNames 的枚举顺序

Object.getOwnPropertyNames方法之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,如何排序,完全由浏览器厂商决定。

ES6规定了该方法返回的数组的排序方式如下:

  • 先排数字,并按照升序排序
  • 再排其他,按照书写顺序排序
4. Object.setPrototypeOf

该函数用于设置某个对象的隐式原型

比如: Object.setPrototypeOf(obj1, obj2),
相当于: obj1.__proto__ = obj2

3-2. 类:构造函数的语法糖

传统的构造函数的问题
  1. 属性和原型方法定义分离,降低了可读性
  2. 原型成员可以被枚举
  3. 默认情况下,构造函数仍然可以被当作普通函数使用
类的特点
  1. 类声明不会被提升,与 let 和 const 一样,存在暂时性死区
  2. 类中的所有代码均在严格模式下执行
  3. 类的所有方法都是不可枚举的
  4. 类的所有方法都无法被当作构造函数使用
  5. 类的构造器必须使用 new 来调用

3-3. 类的其他书写方式

1. 可计算的成员名
2. getter和setter

Object.defineProperty 可定义某个对象成员属性的读取和设置

使用getter和setter控制的属性,不在原型上

3. 静态成员

构造函数本身的成员

使用static关键字定义的成员即静态成员

4. 字段初始化器(ES7)

注意:
1). 使用static的字段初始化器,添加的是静态成员
2). 没有使用static的字段初始化器,添加的成员位于对象上
3). 箭头函数在字段初始化器位置上,指向当前对象

5. 类表达式
6. [扩展]装饰器(ES7)(Decorator)

横切关注点

装饰器的本质是一个函数

3-4. 类的继承

如果两个类A和B,如果可以描述为:B 是 A,则,A和B形成继承关系

如果B是A,则:

  1. B继承自A
  2. A派生B
  3. B是A的子类
  4. A是B的父类

如果A是B的父类,则B会自动拥有A中的所有实例成员。

新的关键字:

  • extends:继承,用于类的定义
  • super
    • 直接当作函数调用,表示父类构造函数
    • 如果当作对象使用,则表示父类的原型

注意:ES6要求,如果定义了constructor,并且该类是子类,则必须在constructor的第一行手动调用父类的构造函数

如果子类不写constructor,则会有默认的构造器,该构造器需要的参数和父类一致,并且自动调用父类构造器

【冷知识】

  • 用JS制作抽象类
    • 抽象类:一般是父类,不能通过该类创建对象
  • 正常情况下,this的指向,this始终指向具体的类的对象

4.async和await

image-20210618161125894
image-20210621103501094

消除回调

有了Promise,异步任务就有了一种统一的处理方式

有了统一的处理方式,ES官方就可以对其进一步优化

ES7推出了两个关键字asyncawait,用于更加优雅的表达Promise

async

async关键字用于修饰函数,被它修饰的函数,一定返回Promise

async function method1(){
  return 1; // 该函数的返回值是Promise完成后的数据
}

method1(); // Promise { 1 }

async function method2(){
  return Promise.resolve(1); // 若返回的是Promise,则method得到的Promise状态和其一致
}

method2(); // Promise { 1 }

async function method3(){
  throw new Error(1); // 若执行过程报错,则任务是rejected
}

method3(); // Promise { <rejected> Error(1) }
await

await关键字表示等待某个Promise完成,它必须用于async函数中

async function method(){
  const n = await Promise.resolve(1);
  console.log(n); // 1
}

// 上面的函数等同于
function method(){
  return new Promise((resolve, reject)=>{
    Promise.resolve(1).then(n=>{
      console.log(n);
      resolve(1)
    })
  })
}

await也可以等待其他数据

async function method(){
  const n = await 1; // 等同于 await Promise.resolve(1)
}

如果需要针对失败的任务进行处理,可以使用try-catch语法

async function method(){
  try{
    const n = await Promise.reject(123); // 这句代码将抛出异常
    console.log('成功', n)
  }
  catch(err){
    console.log('失败', err)
  }
}

method(); // 输出: 失败 123

Promise的基本概念

链式调用规则
  1. then方法必定会返回一个新的Promise

可理解为后续处理也是一个任务

  1. 新任务的状态取决于后续处理:
  • 若没有相关的后续处理,新任务的状态和前任务一致,数据为前任务的数据
  • 若有后续处理但还未执行,新任务挂起。
  • 若后续处理执行了,则根据后续处理的情况确定新任务的状态
    - 后续处理执行无错,新任务的状态为完成,数据为后续处理的返回值
    - 后续处理执行有错,新任务的状态为失败,数据为异常对象
    - 后续执行后返回的是一个任务对象,新任务的状态和数据与该任务对象一致
Promise的静态方法
方法名含义
Promise.resolve(data)直接返回一个完成状态的任务
Promise.reject(reason)直接返回一个拒绝状态的任务
Promise.all(任务数组)返回一个任务
任务数组全部成功则成功
任何一个失败则失败
Promise.any(任务数组)返回一个任务
任务数组任一成功则成功
任务全部失败则失败
Promise.allSettled(任务数组)返回一个任务
任务数组全部已决则成功
该任务不会失败
Promise.race(任务数组)返回一个任务
任务数组任一已决则已决,状态和其一致

5.Fetch Api

Fetch Api 概述

XMLHttpRequest的问题

  1. 所有的功能全部集中在同一个对象上,容易书写出混乱不易维护的代码
  2. 采用传统的事件驱动模式,无法适配新的 Promise Api

Fetch Api 的特点

  1. 并非取代 AJAX,而是对 AJAX 传统 API 的改进
  2. 精细的功能分割:头部信息、请求信息、响应信息等均分布到不同的对象,更利于处理各种复杂的 AJAX 场景
  3. 使用 Promise Api,更利于异步代码的书写
  4. Fetch Api 并非 ES6 的内容,属于 HTML5 新增的 Web Api
  5. 需要掌握网络通信的知识

基本使用

请求测试地址:http://study.yuanjin.tech/api/local

使用 fetch 函数即可立即向服务器发送网络请求

参数

该函数有两个参数:

  1. 必填,字符串,请求地址
  2. 选填,对象,请求配置

请求配置对象

  • method:字符串,请求方法,默认值 GET
  • headers:对象,请求头信息
  • body: 请求体的内容,必须匹配请求头中的 Content-Type
  • mode:字符串,请求模式
    • cors:默认值,配置为该值,会在请求头中加入 origin 和 referer
    • no-cors:配置为该值,不会在请求头中加入 origin 和 referer,跨域的时候可能会出现问题
    • same-origin:指示请求必须在同一个域中发生,如果请求其他域,则会报错
  • credentials: 如何携带凭据(cookie)
    • omit:默认值,不携带 cookie
    • same-origin:请求同源地址时携带 cookie
    • include:请求任何地址都携带 cookie
  • cache:配置缓存模式
    • default: 表示 fetch 请求之前将检查下 http 的缓存.
    • no-store: 表示 fetch 请求将完全忽略 http 缓存的存在. 这意味着请求之前将不再检查下 http 的缓存, 拿到响应后, 它也不会更新 http 缓存.
    • no-cache: 如果存在缓存, 那么 fetch 将发送一个条件查询 request 和一个正常的 request, 拿到响应后, 它会更新 http 缓存.
    • reload: 表示 fetch 请求之前将忽略 http 缓存的存在, 但是请求拿到响应后, 它将主动更新 http 缓存.
    • force-cache: 表示 fetch 请求不顾一切的依赖缓存, 即使缓存过期了, 它依然从缓存中读取. 除非没有任何缓存, 那么它将发送一个正常的 request.
    • only-if-cached: 表示 fetch 请求不顾一切的依赖缓存, 即使缓存过期了, 它依然从缓存中读取. 如果没有缓存, 它将抛出网络错误(该设置只在 mode 为”same-origin”时有效).
返回值

fetch 函数返回一个 Promise 对象

  • 当收到服务器的返回结果后,Promise 进入 resolved 状态,状态数据为 Response 对象
  • 当网络发生错误(或其他导致无法完成交互的错误)时,Promise 进入 rejected 状态,状态数据为错误信息

Response 对象

  • ok:boolean,当响应消息码在 200~299 之间时为 true,其他为 false
  • status:number,响应的状态码
  • text():用于处理文本格式的 Ajax 响应。它从响应中获取文本流,将其读完,然后返回一个被解决为 string 对象的 Promise。
  • blob():用于处理二进制文件格式(比如图片或者电子表格)的 Ajax 响应。它读取文件的原始数据,一旦读取完整个文件,就返回一个被解决为 blob 对象的 Promise。
  • json():用于处理 JSON 格式的 Ajax 的响应。它将 JSON 数据流转换为一个被解决为 JavaScript 对象的 promise。
  • redirect():可以用于重定向到另一个 URL。它会创建一个新的 Promise,以解决来自重定向的 URL 的响应。
Headers 对象

在Request和Response对象内部,会将传递的请求头对象,转换为Headers

Headers对象中的方法:

  • has(key):检查请求头中是否存在指定的key值
  • get(key): 得到请求头中对应的key值
  • set(key, value):修改对应的键值对
  • append(key, value):添加对应的键值对
  • keys(): 得到所有的请求头键的集合
  • values(): 得到所有的请求头中的值的集合
  • entries(): 得到所有请求头中的键值对的集合
文件上传

流程:

  1. 客户端将文件数据发送给服务器
  2. 服务器保存上传的文件数据到服务器端
  3. 服务器响应给客户端一个文件访问地址

测试地址:http://study.yuanjin.tech/api/upload
键的名称(表单域名称):imagefile

请求方法:POST
请求的表单格式:multipart/form-data
请求体中必须包含一个键值对,键的名称是服务器要求的名称,值是文件数据

HTML5 中,JS 仍然无法随意的获取文件数据,但是可以获取到 input 元素中,被用户选中的文件数据
可以利用 HTML5 提供的 FormData 构造函数来创建请求体

6 新增的数组API

静态方法
  • Array.of(…args): 使用指定的数组项创建一个新数组
  • Array.from(arg): 通过给定的类数组 或 可迭代对象 创建一个新的数组。
实例方法
  • find(callback): 用于查找满足条件的第一个元素
  • findIndex(callback):用于查找满足条件的第一个元素的下标
  • fill(data):用指定的数据填充满数组所有的内容
  • copyWithin(target, start?, end?): 在数组内部完成复制
  • includes(data):判断数组中是否包含某个值,使用Object.is匹配

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

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

相关文章

AB试验(二)统计基础

AB试验&#xff08;二&#xff09;统计基础 随机变量 均值类指标&#xff1a;如用户的平均使用时⻓、平均购买金额、平均购买频率等 概率类指标&#xff1a;如用户点击的概率(点击率)、转化的概率(转化率)、购买的概率 (购买率)等 经验结论&#xff1a;在数量足够大时&#…

Vibro-meter VM600 200-510-041-021数字量控制板卡

Vibro-meter VM600 200-510-041-021 数字量控制模块通常用于振动监测和机械设备的控制系统中&#xff0c;以执行振动数据采集、分析和控制任务。以下是通常情况下数字量控制模块的一些产品特点&#xff1a; 多通道输入&#xff1a;这些模块通常配备多个输入通道&#xff0c;以接…

浅析数字孪生在科学研究中的作用和优势

在科学研究领域&#xff0c;数字孪生技术正迅速崭露头角&#xff0c;为研究人员提供了前所未有的工具和资源&#xff0c;以更深入、更全面地理解复杂的自然现象和系统。本文带大家探讨数字孪生对科学研究的作用&#xff1a; 1. 精准建模和仿真 数字孪生技术允许科学家创建真实…

【Minecraft】Lucky Block(幸运方块)mod介绍

文章目录 mod介绍支持版本mod作者合成方式幸运值使用方法总结 mod介绍 幸运方块模组虽然只是添加了一个方块&#xff0c;两种武器&#xff0c;一种药水&#xff0c;但拥有超过一百种可能性&#xff01; 简单地打破幸运方块&#xff0c;它将开出意想不到的东西&#xff01; 你可…

云原生安全性:构建可信任的云应用的最佳实践

文章目录 云原生安全性的重要性1. 数据隐私2. 恶意攻击3. 合规性要求4. 业务连续性 构建可信任的云应用的最佳实践1. 安全开发2. 身份验证与授权3. 容器安全性4. 监控与审计5. 持续集成与持续交付&#xff08;CI/CD&#xff09;6. 安全培训和教育 未来趋势&#xff1a;服务网格…

Swagger 使用教程

Swagger 官网&#xff1a; API Documentation & Design Tools for Teams | Swagger 整合swagger 依赖&#xff1a; springfox-swagger2 springfox-swagger-ui <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</a…

气象站:从气候预测到环境监测

在我们的日常生活中&#xff0c;气象站的存在可能并不显眼&#xff0c;但实际上&#xff0c;它对我们的生活产生了重要的影响。气象站是一种用于收集和监测天气数据的设施&#xff0c;通过它&#xff0c;我们可以获得各种关于气候和天气的宝贵信息。那么&#xff0c;气象站可以…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要 1. 横向静稳定性2. 横向静稳定准则3. 横向静稳定性的组成4. 参考资料 1. 横向静稳定性 2. 横向静稳定准则 对于横向静稳定性飞机&#xff0c;右滚转扰动会产生正侧滑&#xff0c;飞机产生左滚恢复力矩(负)&#xff0c;即 Δ …

Python之数据库(MYSQL)连接

一&#xff09;数据库SQL语言基础 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database…

想入行视觉设计?先看这篇文章再说!

大家好我是设计师不知名设计师l1m0&#xff0c;今天要给大家分享的设计岗位是&#xff1a;视觉设计师。 在当今数字化时代&#xff0c;视觉设计师扮演着至关重要的角色。他们是创意世界的魔术师&#xff0c;通过各种视觉元素的精妙组合&#xff0c;为品牌、产品和项目赋予生命…

【微信读书】数据内容接口逆向调试02

需求爬取微信读书的某一本书的整本书的内容 增强需求&#xff0c;大批量爬取一批书籍内容 众所周知微信读书是一个很好用的app&#xff0c;他上面书籍的格式很好&#xff0c;质量很高。 本人充值了会员但是看完做完笔记每次还得去翻很不方便&#xff0c;于是想把书籍内容弄下…

专注写作,快速上线:Cpolar+Inis帮助你在Ubuntu上建立博客网站

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

信息系统项目管理师(第四版)教材精读思维导图-第十一章项目成本管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 11.1 管理基础 11.2 管理过程 11.3 规划成本管…

2023-简单点-怎么知道树莓派是什么cpu架构?

树莓派是几位&#xff1f; getconf LONG_BIT https://qengineering.eu/install-ncnn-on-raspberry-pi-4.html

Redis过期时间的思考

当我们把 Redis 当做缓存来使用时&#xff0c;设置过期时间是必须的&#xff0c;但具体设置多少的过期时间呢&#xff0c;针对不同的场景会有不同的决策。 虚假一个场景&#xff0c;我们基于用户的地理位置推荐附近的陌生主播&#xff0c;用户可以线下去找主播沟通。当系统第一…

【网络技术】心跳机制(入门讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

GB28181,sdk,设备集成和平台测试

本文章主要测试记录集成gb28181的arm端&#xff0c;用公开的平台测试gb2818的视频传输等 系统: 平台:windows10 设备:arm-cortex-A7,1.3G 平台软件:SkeyeVSS gb28181的协议等&#xff0c;在这里就不具体讨论&#xff0c;网上有很多资料,可自行查阅。 本文只是测试一下&am…

抖音小店:庞大用户基数与强大商业化能力的未来发展

抖音小店作为抖音平台的一项新业务&#xff0c;已经取得了一定的成绩&#xff0c;并且具备着广阔的未来发展空间。以下是四川不若与众对抖音小店未来和发展的分析。 首先&#xff0c;抖音小店的用户基数庞大&#xff0c;这为其未来的发展提供了坚实的基础。截至2021年底&#x…

SpringBoot自动配置入门

文章目录 前言自动包规则原理及初始化自动配置1.SpringBootConfiguration2.ComponentScan3.EnableAutoConfiguration&#xff08;1&#xff09;AutoConfigurationPackage&#xff08;2&#xff09;Import(AutoConfigurationImportSelector.class) 4.修改默认配置 总结&#xff…