let

  1. 与 var 的区别
功能 let var
块级作用域
变量提升
重复声明(相同作用域内)
  1. 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

具有一下特征:

  • 声明变量只读

  • 若声明的为复合类型的数据(对象、数组等),变量指向内存地址,即变量中的内容可变

  • 只在声明的块级作用域有效

  • 不具有变量提升(需在声明后才可以使用)

  • 不可重复声明

箭头函数

  1. 定义形式
// 如果没有参数或多个参数,使用 ()
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})
  1. 与普通函数的区别
  • 箭头函数没有构造方法,不可使用 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}

三点运算符

  1. 展开数组
let arr1 = [1, 2, 3];

// [1, 2, 3, 4, 5, 6]
let arr2 = [...arr1, 4, 5, 6];
  1. 默认参数
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 对象的新应用

  1. JSON.stringify/parse

序列化/反序列化

  1. 简写
  • 属性和值名字相同的可以简写
  • 方法可以简写(省去 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.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'
  1. 导入

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 新特性笔记的更多相关文章

  1. html新特性笔记

    HTML5知识总结 l  文档类型声明:<!DOCTYPE HTML> l  新绘制元素: Canvas:标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API ...

  2. C++ 新特性 笔记 2 右值引用

    C ++ Rvalue引用说明 以下内容,主要是上述链接的摘要 介绍 Rvalue引用是C ++的一个特性,它是随C ++ 11标准添加的.使右值参考有点难以理解的是,当你第一次看到它们时,不清楚它们 ...

  3. CSS/CSS3语法新特性笔记

    CSS层叠样式表 三大特性 层叠性:相同的样式会覆盖 继承性:属性可向下继承 优先级:范围越小权重越高 选择器 基础选择器 标签选择器 1 body { 2 color:#fff; 3 } 类选择器 ...

  4. java8新特性笔记

    1.forEach(),遍历数据结构中的元素,括号内可以带一个闭包的方法 2.双冒号用法:forEach(this::doSchedule),如果运行环境是闭包,java允许使用双冒号的写法来直接调用 ...

  5. MySQL5.7新特性笔记

    001.用户验证方式上的变化 MySQL5.7已经不要支持mysql_old_password验证插件,也不再支持old_password函数,也就说old_passwords也就不能被设置成1了.

  6. C++ 新特性 笔记

    摘录 constexptr C++14尝鲜:constexpr函数(编译期函数) 总结来说,就是在c++11之前,要实现编译期数值计算需要繁琐的模板元编程.在c++11 中,可以是函数,在一句rutu ...

  7. ES6 新特性(笔记)

    1.定义变量     let         a).块作用域 , 不同于var的函数作用域         b).不可以重复定义同一个变量名           注:              {} ...

  8. C#新特性记录

    C#6.0新特性笔记 Getter专属赋值 可以在构造函数中,给只有get的属性赋初始值. class Point { public int x { get; } public Point() { x ...

  9. C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

随机推荐

  1. [loj3526]修改DNA

    如果$a[x..y]$和$b[x..y]$的某种字符数量不同,显然无解 考虑一个$[x,y]$的排列$p[x..y]$,使得$\forall x\le i\le y,a_{i}=b_{p_{i}}$, ...

  2. [bzoj4553]序列

    记第i个位置有三个属性:1.ai表示原来的值:2.bi表示变成最大的值:3.ci表示变成最小的值.那么对于如果i在j的前面,那么必然有:$ai\le cj$且$bi\le aj$,那么令f[i]表示以 ...

  3. round函数和获取当前时间函数

    round函数:对一个浮点类型的数据进行四舍五入:round(3.14)   运行结果就是3 获取当前时间: time.time()    ,time函数需要导入才能使用,import time  

  4. 面渣逆袭:HashMap追魂二十三问

    大家好,我是老三. HashMap作为我们熟悉的一种集合,可以说是面试必考题.简单的使用,再到原理.数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时. 1.能说一下HashMap ...

  5. 十行HTML实现增强现实--思途青岛

    你想通过网络实现增强现实吗?现在你只需要 10 行 HTML 代码!真的!让我带你看一看代码,非常简单.我们最近发布了AR.js.你不需要安装任何应用,用你的手机通过网络就能体验到强大的增强现实.但让 ...

  6. ARC128D

    考虑我们直接\(dp\). 那么需要快速的求出一段是否可以被消掉只剩两端. 我们可以考虑反过来做的. 我们知道如果全为\(abab\)型或者\(aa\)型则无法消掉 那么我们要前缀和,以及遇到\(aa ...

  7. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  8. Codeforces 650D - Zip-line(树状数组)

    Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...

  9. 配置GitHub和 Gitee共存环境

    配置GitHub 和Gitee共存环境 前言 Git共有三个级别的config文件,分别是system.global和local 在当前环境中,分别对应 %GitPath%\mingw64\etc\g ...

  10. 有限元边界 Dirichlet 条件处理

    参考自百度文档,这里只考虑 Dirichlet 边界条件情况. 有限元法基本方法就是是构造线性方程组 \[\begin{equation} Au = f \end{equation}\] 进行求解.其 ...