JS:ES6~ES11基础语法(二)

一、扩展运算符

定义: ... 扩展运算符能将数组转换为逗号分隔的参数序列

javascript 复制代码
const tsboys = ["ysqx", "wy", "wjk"]

function chunwan() {
    console.log(arguments)
}

// 扩展运算符能将数组转换为逗号分隔的参数序列
chunwan(...tfboys) // "ysqx", "wy", "wjk"

二、Symbol基本使用

定义: ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是Jsy语言的第七种数据类型,是一种类似于字符串的数据类型

特点:

  1. Symbol的值是唯一的,用来解决命名冲突的问题

  2. Symbol值不能与其它数据进行运算

  3. Symbol定义的对象属性不能使用for..in循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名

javascript 复制代码
// 创建Symbol变量
let s = Symbol()
let s2 = Symbol("s2")
// Symbol.for创建
let s3 = Symbol.for("s3")

三、迭代器

定义: 迭代器是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作

特点:

  1. ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费

  2. 原生具备iterator接口的数据(可用for...of遍历), 例如: Array、Arguments、Set、Map、String、TypedArray、NodeList

  3. 工作原理:

a、创建一个指针对象,指向当前数据结构的起始位置

b、第一次调用对象的next方法,指针自动指向数据结构的第一个成员

c、接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员

注意: 需要自定义遍历数据的时候,要想到迭代器

四、生成器

定义: ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同

语法结构:

复制代码
function* gen() {
  yield 'aaa';
  yield 'bbb';
}

五、Promise

定义: Promise是ES6引入的异步编程的新解决方案.语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果

  1. Promise构造函数: Promise(excutor) {}

  2. Promise.prototype.then方法

a、如果回调函数中返回的结果是非promise类型的属性,状态为成功,返回值为对象的成功回调

b、如果返回结果是promise类型,状态则根据返回结果的状态一致,返回结果为promise的then方法返回的值

c、抛出错误

  1. Promise.prototype.catch方法

六、集合介绍与API

(1)、Set

定义: ES6提供了新的数据结构Set.它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用扩展运算符和for..of进行遍历

集合的属性和方法:

  1. size: 返回集合的元素个数

  2. add: 增加一个新元素,返回当前集合

  3. delete: 删除元素,返回boolean值

  4. has: 检测集合中是否包含某个元素,返回boolean值

  5. clear: 清空集合,返回undefined

(2) Map

定义: ES6提供了Map数据结构.它类似于对象,也是键值对的集合.但是'键'的范围不限于字符串,各种类型的值(包括对象)都可以当作键.Map也实现了iterator接口,所以可以使用扩展运算符和for...of进行遍历

Map的属性和方法:

  1. size: 返回Map元素的个数

  2. set: 增加一个新元素,返回当前Map

  3. get: 返回键名对象的键值

  4. has: 检测Map中是否包含某个元素,返回boolean值

  5. clear: 清空集合,返回undefined

七、Class类

定义: ES6提供了更接近传统语言的写法,引入了Class这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面对对象编程的语法而已.

知识点:

  1. class声明类

  2. constructor定义构造函数初始化

  3. extends继承父类

  4. super调用父级构造方法

  5. static定义静态方法和属性

  6. 子类对父类方法可以重写

八、数值扩展

  1. Number.EPSILON 是Js表示的最小精度

EPSILON 属性的值最接近于2.2204460492501310808472633361816E-16

  1. 二进制和八进制

  2. Number.isFinite:() 检测一个数值是否为有限数

  3. Number.isNaN(): 检测一个数是否为NaN

  4. Number.parseInt()、Number.parseFloat(): 字符串转整数

  5. Number.isInteger(): 判断一个数是否为整数

  6. Math.trunc(): 将数字小数部分抹掉

  7. Math.sign(): 判断一个数到底是正数、负数还是零

九、对象方法扩展

  1. Object.is(): 判断两个值是否完全相等

  2. Object.assign(): 对象的合并

  3. Object.setPrototypeOf(): 设置原型对象( 不建议使用 )

Object.getPrototypeOf(): 获取原型对象

十、模板化

定义: 模块化是指将一个大的程序文件,拆分成许多较小的文件,然后将小文件组合起来

模块化的优势:

  1. 防止命名冲突

  2. 代码复用

  3. 高维护性

模块化规范产品(ES6之前的模块化规范)

  1. CommonJS => NodeJs、Browserify

  2. AMD => requireJS

  3. CMD => seaJS

ES6模块化语法:

模块功能主要由两个命令构成: export和import

  1. export命令用于规定模块的对外接口

  2. import命令用于输入其它模块提供的功能

babel对ES6模块化代码转换(es6及以上转换为es5)

操作步骤:

  1. 安装工具: babel-cli、babel-preset-env、browserify(webpack)

  2. 编译转换命令: npx babel xxx(js文件目录) -d xxx(js文件输出目录) --presets=babel-preset-env

  3. 打包命令: npx browserify xxx.js(入口js文件位置) -o xxx.js(打包后文件位置)

相关推荐
Amumu121382 小时前
Js:ES6~ES11基础语法(一)
开发语言·前端·javascript
m0_569881472 小时前
跨语言调用C++接口
开发语言·c++·算法
zdl6862 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
英俊潇洒美少年2 小时前
#React 16/17/18/19 超精简速记版(面试前5分钟背完)
前端·react.js·面试
weixin_443478512 小时前
flutter组件学习之对话框与提示详解
javascript·学习·flutter
lightqjx2 小时前
【前端】前端学习一之HTML从入门到精通
前端·学习·html
Joyee6912 小时前
RN 的事件调度 RuntimeScheduler
前端·react native
LilySesy2 小时前
【与AI+】英语day1——ABAP基础与数据类型
开发语言·ai·sap·abap
你不是我我2 小时前
【Java 开发日记】我们来说一下 b+ 树与 b 树的区别
java·开发语言