ES 6 新特性笔记
let
- 与 var 的区别
功能 | let | var |
---|---|---|
块级作用域 | ️ | |
变量提升 | ️ | |
重复声明(相同作用域内) | ️ |
- var 没有块级作用域的解决方法
使用函数替代块级作用域,以保证变量的正常使用,如:
...
<button>btn1</button>
<button>btn2</button>
<button>btn3</button>
<button>btn4</button>
<button>btn5</button>
<script>
var btns = document.getElementsByTagName('button');
for (var i=0, i<btns.length, i++) {
(function(i){
btns[i].addEventListener('click', function(){
console.log(i)
})
})(i)
}
</script>
...
const
具有一下特征:
声明变量只读
若声明的为复合类型的数据(对象、数组等),变量指向内存地址,即变量中的内容可变
只在声明的块级作用域有效
不具有变量提升(需在声明后才可以使用)
不可重复声明
箭头函数
- 定义形式
// 如果没有参数或多个参数,使用 ()
let f1 = () => 1
let f2 = (a, b) => a * b
// 如果只有一个参数,可以不用 ()
let f3 = x => x * 2
// 如果函数体只有一条语句,可以不用 {}
let f4 = x => x * x
// 简写单条语句时遇到对象,需要加 ()
let f5 = x => ({name: x, age: 18})
- 与普通函数的区别
箭头函数没有构造方法,不可使用
new
关键字生成function f1 () { } const f2 = () => {} // ok
f = new f1(); // error
f2 = new f2()
this
关键字的指向/*
* 在普通函数中,this 指向调用者
* 如果无调用者,则指向 window
*
* 在箭头函数中,this 指向其定义所在的上层作用域的 this 指针
*/ const box = document.getElementById('#box'); // 对于普通函数,如需在此处访问 box 对象
// 需要将 this 先赋值给变量方可在 setTimeout 中调用
// 否则 setTimeout 中调用的 this 为 window 对象
box.onclick = function () {
const obj = this;
setTimeout(function () {
obj.className = 'bg-blue'
}, 3000)
} // 箭头函数中的 this 指向其定义所在的上层作用域
// 这里函数中的 this 即 box 对象
box.onclick = function () {
setTimeout(() => {
this.className = 'bg-blue'
}, 3000)
}
Array.map/filter/reduce
- map 将函数应用于数据的每一个元素,并将返回值作为新的数组元素返回
- filter 将函数应用于数据的每一个元素,并将返回 true 的元素组成新数组返回
- reduce 累积引用
Set
集合
Map
类似于 python 中的 dict
String.startsWith/endsWith
判断字符串的起始值与结尾的值
模板字符串
使用 ` ,支持换行和变量的传递:
let name = 'kingron';
let tempStr = `my name is ${name}`
解构赋值
// 数组使用数组来接受,长度可以不一样
// 按顺序赋值 x: 1, y: 2
let [x, y] = [1, 2, 3, 4]
// 对象使用 key 名来接收,必须保证名字一致
let {name, age} = {name: 'kingron', age: 18, money: 99999}
三点运算符
- 展开数组
let arr1 = [1, 2, 3];
// [1, 2, 3, 4, 5, 6]
let arr2 = [...arr1, 4, 5, 6];
- 默认参数
function func (...args) {
console.log(args)
}
// [1, 2, 3]
func(1, 2, 3)
类与继承
定义类:
// 创建类
class Person {
// 构造方法
constructor(name, age, gender) {
// 绑定实例属性
this.name = name;
this.age = age;
this.gender = gender
}
// 实例方法,不需加 function 关键字
say() {
console.log(`${this.name} said it ${this.age} years ago!`)
}
}
// 实例化
const p = new Person('kongron', 18, 'M');
p.say()
继承:
class Student extends Person {
constructor(name, age, gender, school) {
// 调用父类的构造方法
super(name, age, gender);
this.school = school;
}
}
JSON 对象的新应用
- JSON.stringify/parse
序列化/反序列化
- 简写
- 属性和值名字相同的可以简写
- 方法可以简写(省去
function
关键字)
const name = 'kingron';
const person = {
name,
hello(to) {
console.log(this.name + ' said hello to ' + to)
}
}
// kingron
console.log(person.name);
person.hello('j');
模块化编程
- 暴露变量的方式
1.1. 定义时暴露
// m1.js
export add = (a, b) => a + b;
// m2.js
import {add} from 'm1.js'
1.2. 统一暴露
// m1.js
const add = (a, b) => a + b;
const sub = (a, b) => a- b;
export {add, sub}
1.3. 默认
使用 default
关键字
// m1.js
export default (a, b) => a + b;
export sub = function(a, b) {
return a - b
}
// m2.js
// 导入时不需要 {},可以自定义导入的名称,结果为 default 对应的变量
import myadd from 'm1.js'
- 导入
2.1. js 中导入
import {add} from 'm1.js'
2.2. html 中导入
<script src="m1.js" type="module"></script>
Promise
用法说明 & 示例:
/*
* Promise 接收一个函数作为参数
* 该函数又必须接收两个参数 resolve 和 reject 作为参数
* 在函数体内:
* - 调用 resolve,传入的参数将作为参数传递给 then 中的第一个参数
* - 调用 reject,传入的参数将作为参数传递给 then 中的第二个参数
*
* 调用存在顺序限制,如果先调用了 resolve/reject 其中一个,另外一个则不会被调用
*
* 函数也可以返回新的 Promise 实例
*/
new Promise((resolve, reject) => {
throw "fine, It's not ok";
reject("It's not ok")
setTimeout(() => {
resolve("It's ok")
}, 1000)
}).then(res => {
// 处理结果
console.log(res)
}, err => {
// 处理错误
console.log('error in then: ' + err)
}).catch(err => {
/*
* 如果 then 中的第二个参数存在
* 则出现错误不会被传入此方法
*/
// 处理错误
console.log('error in catch: ' + err)
})
Promise.all
用法
Promise.all([
new Promise(...),
new Promise(...),
...
]).then(...)
ES 6 新特性笔记的更多相关文章
- html新特性笔记
HTML5知识总结 l 文档类型声明:<!DOCTYPE HTML> l 新绘制元素: Canvas:标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API ...
- C++ 新特性 笔记 2 右值引用
C ++ Rvalue引用说明 以下内容,主要是上述链接的摘要 介绍 Rvalue引用是C ++的一个特性,它是随C ++ 11标准添加的.使右值参考有点难以理解的是,当你第一次看到它们时,不清楚它们 ...
- CSS/CSS3语法新特性笔记
CSS层叠样式表 三大特性 层叠性:相同的样式会覆盖 继承性:属性可向下继承 优先级:范围越小权重越高 选择器 基础选择器 标签选择器 1 body { 2 color:#fff; 3 } 类选择器 ...
- java8新特性笔记
1.forEach(),遍历数据结构中的元素,括号内可以带一个闭包的方法 2.双冒号用法:forEach(this::doSchedule),如果运行环境是闭包,java允许使用双冒号的写法来直接调用 ...
- MySQL5.7新特性笔记
001.用户验证方式上的变化 MySQL5.7已经不要支持mysql_old_password验证插件,也不再支持old_password函数,也就说old_passwords也就不能被设置成1了.
- C++ 新特性 笔记
摘录 constexptr C++14尝鲜:constexpr函数(编译期函数) 总结来说,就是在c++11之前,要实现编译期数值计算需要繁琐的模板元编程.在c++11 中,可以是函数,在一句rutu ...
- ES6 新特性(笔记)
1.定义变量 let a).块作用域 , 不同于var的函数作用域 b).不可以重复定义同一个变量名 注: {} ...
- C#新特性记录
C#6.0新特性笔记 Getter专属赋值 可以在构造函数中,给只有get的属性赋初始值. class Point { public int x { get; } public Point() { x ...
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
随机推荐
- [luogu4548]歌唱王国
(可以参考hdu4652,因此推导过程比较省略) 类似的定义$f_{i}$和$g_{i}$,同样去插入$len$个字符,但注意到并不是任意一个位置都可以作为结尾,$i+j$可以作为结尾当且仅当$s[0 ...
- [luogu5204]Train Tracking 2
考虑一个位置的上界,即$bi=min(c_{i-k+1},c_{i-k+2},--,ci)$,那么每一个位置有两种方式:1.达到上界:2.未达到上界那么可以将权值相同的ci和bi提出来,由于权值不同的 ...
- SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解(3)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续分析上一节提到的 WebHandler.加入 Spring Cloud Sleut ...
- git连接远程仓库
1. 连接远程仓库 1.1. 创建仓库 在连接远程仓库之前,得先要确定你有一个远程仓库,到GitHub官网搞一个账户. 点右上角的加号然后"New repository"输入一个仓 ...
- centos与ubuntu安装及相关问题解答
1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 答:Linus的发行版本有slackware,debian,redhat,Alpine,ArchLinux,Gentoo,LFS, ...
- 洛谷 P3711 - 仓鼠的数学题(多项式)
洛谷题面传送门 提供一种不太一样的做法. 假设要求的多项式为 \(f(x)\).我们考察 \(f(x)-f(x-1)\),不难发现其等于 \(\sum\limits_{i=0}^na_ix^i\) 考 ...
- 洛谷 P3214 - [HNOI2011]卡农(线性 dp)
洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于 ...
- Codeforces 295D - Greg and Caves(dp)
题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...
- MISA(在线)注释叶绿体基因组SSR
SSR (Simple Sequence Repeat),即简单重复序列,是一种以PCR技术为核心的DNA分子标记技术,也称为微卫星序列或者串联重复. 简单重复顾名思义就是以很短的序列为一个单元,比如 ...
- R语言与医学统计图形-【26】ggplot2主题函数
ggplot2绘图系统--主题函数 1. theme函数 theme_*系列函数提供了9种不同的风格. theme_grey/gray/bw/linedraw/light/minimal/classi ...