一、symbol

javascript基本数据类型:

null、undefined、number、boolean、string、symbol

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值(随机生成的一个永远都不会重复的id串)

let s = Symbol();

typeof s
// "symbol"

二、Set和Map

1、Set()

是es6提供的一种新的数据结构,类似于数组,但是set里面的数据具有唯一性

const s = new Set();

Set实例的属性和方法

let set = new Set([1, 2, 3, 4, 4]);
//返回实例的总数
set.size //5 //操作方法
set.add(value) //添加某个值,返回结构本身
set.delete(value) //删除某个值,返回一个布尔值
set.has(value) //返回一个布尔值,表示是否为set成员
set.clear() //清空所有成员,无返回值 //遍历方法
keys(),values(),entries()
// 注:Set 结构没有键名,只有键值,所以keys(),values()的行为完全一致

set对象的操作

// 数组去重
let arr = [1, 2, 3, 4, 4];
[...new Set(arr)]; // [1, 2, 3, 4] //并集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union = new Set([...a, ...b]); // {1, 2, 3, 4} //交集
let c = new Set([1, 2, 3]);
let d = new Set([4, 3, 2]);
let intersect =new Set([...c].filter(x => d.has(x))) // {2, 3} //差集
let e = new Set([1, 2, 3]);
let f = new Set([4, 3, 2]);
let difference =new Set([...e].filter(x => !f.has(x))) // {1}

2、Map()

Map 数据结构,它类似于对象,但是键的范围不限于字符串,可以为各种类型的值(对象或者原始值)

//key 是对象
let map = new Map();
let obj = {msg:'hello'} //map设置和获取值(用一个对象作为了键)
map.set(obj, 'content')
map.set('key', 'value')
map.get(obj) // 'content' //size 属性
map.size //2 //返回一个布尔值,表示某个键是否在当前 Map 对象之中
map.has(obj) //true //删除某个键,返回true。如果删除失败,返回false
map.delete(obj) //true //清除所有成员,没有返回值。
map.clear() //遍历方法
keys(),values(),entries()
//注:Map 的遍历顺序就是插入顺序

map对象的操作

//Map 与 Array的转换
//map构造函数 可以与一个 二维键值对数组 相互转换
let arr = [
['key1', 'val1'],
['key2', 'val2'],
]
let map = new Map(arr);
let outArr = Array.from(map); //Map的克隆
let map1 = new Map(arr);
let cloneMap1 = new Map(map1); //Map的合并
//如果有重复的键值,则后面的会覆盖前面的
let arr2 = [
['key1', 'val1'],
['key2', 'val2'],
['key3', 'val3'],
]
let first = new Map(arr);
let second = new Map(arr2);
let merged = new Map([...first,...second]);

三、promise

是异步编程的一种解决方案,可以处理多个异步请求的执行顺序等

//基本用法
let p1 = function(){
return new Promise((resolve,reject)=>{
//异步操作1,成功执行resolve函数,失败执行reject函数
})
}
let p2 = function(){
return new Promise((resolve,reject)=>{
//异步操作2,成功执行resolve函数,失败执行reject函数
})
} p1.then((data)=>{
console.log('成功的回调')
},(err)=>{
console.log('失败的回调')
}) //Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
let p = Promise.all([p1,p2])
p.then((data)=>{
//两个都执行了resolve方法
}).catch((err)=>{
//一个不满足就执行这里
})

四、Generator函数 和 async函数

1、Generator函数

ES6 提供的一种异步编程解决方案

操作繁琐,需要手动调用next方法,不常用

function* test(){
yield 'hello'; //yield可以为一个异步函数的返回结果
yield 'world';
...
} let result = test();
console.log(result.next()); // { value: 'hello', done: false }
console.log(result.next()); // { value: 'world', done: false }
console.log(result.next()); // { value: undefined, done: true }

2、async函数(es7)

它就是 Generator 函数的语法糖

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。

function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, "finish");
});
}
async function asyncTimeSys(){
await timeout(1000);
console.log("第一层异步结束!")
await timeout(1000);
console.log("第二层异步结束!")
await timeout(1000);
console.log("第三层异步结束!")
await timeout(1000);
console.log("第四层异步结束!")
await timeout(1000);
console.log("第五层异步结束!")
return "all finish";
}
asyncTimeSys().then((value)=>{
console.log(value);
});

五、Class类

通过class关键字,可以定义类

1、基本用法

//es6之前定义类(构造函数)
function Person(name,age){
this.name = name;
this.age = age;
}
let student = new Person('小明',18);
//定义共有方法
Person.prototype.say = function(){
return this.name +'今年'+ this.age;
}
console.log(student.say()) //小明今年18 //通过class定义类
class Person {
//静态属性,直接通过Person.type拿到值
static type = '地球人';
//静态方法,通过Person.eat()调用
static eat(){
console.log('吃点啥');
} //构造器定义类的属性
constructor(name,age){
this.name = name;
this.age = age;
}
//定义共有方法
say(){
return this.name +'今年'+ this.age
}
}
let student = new Person('小明',18)
console.log(student.say()) //小明今年18

2、class的继承

可以通过extends关键字实现继承

class Person {
constructor(name){
this.name = name;
}
say(){}
} class Teachaer extends Person{
constructor(name,job){
super(name); //需要用到this,则必须执行一次super函数,
this.job = job;
}
work(){
return `${this.name}的工作是${this.job}`;
}
}
let xiaoming = new Teachaer('小明','教书')
console.log(xiaoming.work()) //小明的工作是教书

六、Module语法

ES6之前已经出现了js模块加载的方案,最主要的是CommonJS(用于服务器端,如nodeJS)和AMD规范(用于浏览器,如requireJS)

1、export 导出

export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口

//1、一个一个的导出
//导出多个变量
export var name = "小明";
export var age = 18;
//导出方法
export function say(){}
//导出类
export class Person{} //2、多个一起导出
let a = 1;
let b = 2;
let c = 3;
export { a, b, c }
//通过向大括号中添加 a、b、c 变量并且export输出,就可以将对应变量值以 a、b、c 变量标识符形式暴露给其他文件而被读取到

2、import 导入

import用于在一个模块中加载另一个含有export接口的模块。

//1、引入所有成员
import * as items from '模块路径'
//注:* 代表所有,as后面跟别名 //2、引入指定成员
import { a, b } from '模块路径'

3、export default 导出默认成员

一个模块只能有一个export default

var name = '小明'
export default name; //引入default成员
import name from '模块路径'

深入理解es6(下)的更多相关文章

  1. 理解 ES6 Generator-next()方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 老树新芽,在ES6下使用Express

    要让Express在ES6下跑起来就不得不用转码器Babel了.首先新建一个在某目录下新建一个项目.然后跳转到这个目录下开始下面的操作. 简单走起 安装babel-cli $ npm install ...

  3. 深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图

    原文:深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图 IIS部署ASP.NET Core2.1 应用拓扑图 我们看到相比Asp.Net, 出现了3个新的组件:ASP.NET Co ...

  4. 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理

    理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...

  5. 深入理解LINUX下动态库链接器/加载器ld-linux.so.2

    [ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...

  6. ES6下的Function.bind方法

    在JavaScript的使用中,this的指向问题始终是一个难点.不同的调用方式,会使this指向不同的对象.而使用call,apply,bind等方式,可改变this的指向,完成一些令人惊叹的黑魔法 ...

  7. MindSpore技术理解(下)

    MindSpore技术理解(下) 4 GraphEngine 由于深度学习算法需要进行大量的计算,很多公司都设计了自己的深度学习专用处理器(如谷歌的张量处理器.阿里巴巴的含光等),华为也发布了自主设计 ...

  8. 基于TensorRT的BERT实时自然语言理解(下)

    基于TensorRT的BERT实时自然语言理解(下) BERT Inference with TensorRT 请参阅Python脚本bert_inference.py还有详细的Jupyter not ...

  9. 《理解 ES6》阅读整理:函数(Functions)(五)Name Property

    名字属性(The name Property) 在JavaScript中识别函数是有挑战性的,因为你可以使用各种方式来定义一个函数.匿名函数表达式的流行使用导致函数调试困难,在栈信息中难以找出函数名. ...

随机推荐

  1. linux 压缩、解压、zip/unzip/jar

    网上很多人说用jar命令解压,但jar命令解压时不能指定目录,推荐使用unzip解压war包. unzip -d 指定目录 [root@oracle upload]# unzip -oq common ...

  2. pycharm 生成requirements.txt

    在命令行中输入 pip freeze>requirements.txt 1 安装requirements文件中的包 pip install -r requirements.txt

  3. Eclipse 修改(重定向)SVN地址

    由于SVN服务器IP变了,需要重定向SVN的路径 1.点击右上角1位置的按钮,然后选择需要打开的窗口(SVN资源库) 2.右击SVN资源库中的项目,选择重定向,然后修改新的URL即可 1. 进入本地s ...

  4. python获取文件路径

    摘自:https://blog.csdn.net/Poo_Chai/article/details/89764001 import os root_path = os.path.abspath(os. ...

  5. Kafka高级设计和架构,一文深化理解

    主题: 1.kafka是写磁盘还是写内存? 2.kafka究竟是由 consumer 从 broker 那里拉数据,还是由 broker 将数据推到 consumer? 3.如何区分已消费(consu ...

  6. 设置table表格的单元格间距两种方式

    table表格里设置单元格td之间的间距,通常用cellspacing设置单元格间距,有时候该属性可能无效,或需要用其他方式时,可用其他方式实现,例如在背景是白色背景的时候,设置单元格td的borde ...

  7. 【计算机视觉基础】IPM

    IPM code #if 0 void xyp2ipmp(cv::Mat& xyp, cv::Mat& ipmp, cv::Mat& xylim, Size& sz){ ...

  8. 华为交换机trunk端口更改access提示:Error: Please renew the default configurations.

    现象: 华为交换机接口由原来 trunk 接口更改 access 提示 Error: Please renew the default configurations. 解决方法: 在交换机视图模式下, ...

  9. 【问题】Could not locate PropertySource and the fail fast property is set, failing

    这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务 ...

  10. 编程语言与python介绍

    目录 一.编程语言的发展史 1.1 机器语言 1.2 汇编语言 1.3 高级语言 1.3.1 编译型 1.3.2 解释型 1.4 总结 2.python介绍 2.1 python解释器版 2.2 运行 ...