ES6部分总结

1.arrows箭头函数
语法: =>
支持块级函数体, 同时也支持带返回值的表达式函数体.
与普通函数的this作用域不同, 箭头函数内部与它周围代码共享this作用域
即, this指向同一个东西
let obj = {
name:"leon",
arr:[1,2,3,4],
printArr () {
this.arr.forEach(f => console.log(this.name + "--->" + f))
}
}
//=====================================================================
2. classes
支持基于prototype的继承
超级调用 super call
实例instance
静态方法 static methods
// Classes
class SkinnedMesh extends THREE.Mesh {
constructor(geometry, metrials) {
super(geometry, meterials);

this.idMatrix = SkinnedMesh.defaultMatrix();
this.bones = [];
this.boneMatrices = [];

// ...
}

update(camera) {
// ...

super.update();
}

get boneCount() {
return this.bones.length;
}

set matrixType(matrixType) {
this.idMatrix = SkinnedMesh[matrixType]();
}

static defaultMatrix() {
return new THREE.Matrix4();
}
}
//======================================================================
3 . Template Strings 模板字符串
类似python

// 简单字面量字符串
`today is a good day`

// 多行字符串
`jun kai wang love
fu gui wang.`

// 字符串插值
let name = "Leon";
let time = "now";
`Hello ${name}, are you ok ${time}?`

// 构造一个HTTP请求前缀, 用于演绎替换和构造
POST `http://foo.org/bar?a=${a}&b=${b}
Content-type: application/json
X-Credentials: ${credentials}
{"foo": ${foo},
"bar": ${bar}}`(myOnReadyStateChangeHandler);

//=========================================================================
4.Destructuring 解构
let [a,,b] = [1,2,3] //故障弱化 在未匹配到值得情况下,产生一个undefined
类似标准的对象查找属性 obj["name"]

let [a] = [] // a === undefined //故障弱化解构

let [a=1] = [] // a === 1 // 带默认值

let{a,b,c} = get(); // 在scope内绑定a,b及c
//举个简单例子
function fn(){
var aa = 1, bb = 2,cc =3;
return {aa,bb,cc}
}
console.log(fn()) // {aa:1,bb:2,cc:3}
let {aa:q,bb:w,cc:e} = fn();
console.log(q,w,e) // 1,2,3
值得注意的是: 此时的解构赋值 = 左边 要先写函数返回值 aa : q 这样对应
//=========================================================================
5.Default + Rest + Spread 默认参数, 剩余参数(Rest Parameters), Spread语法
// y设置默认值
function f(x, y = 2) {
// 如果没有传入y的值(或者传入的是undefined), 那么y就等于默认的值12
return x + y;
}
f(3) === 5

// 将传入的参数的剩余参数绑定到数组
function f(x, ...y) {
// y是一个数组Array
return x * y.length;
}

f(3, "hello", true) === 6;

// ...操作符 将数组展开
function f(x, y, z) {
return x + y + z;
}
// 传入一个数组作为参数
f(...[1, 2, 3]) === 6;
//==============================================================
6. let + const
let 无变量提升 且 存在暂存死区

const 定义常量 . 无法修改

注: const定义的数组. 数组内容可以改变, 但指针(变量)指向的地址不会变
//====================================================================
7.Iterators + for..of 迭代器 for..of ### ?
let fibonacci = {
[Symbol.iterator](){
let pre = 0;
let cur = 1;
return {
next(){
[pre, cur] = [cur, pre + cur];
return {done: false, value: cur}
}
}
}
}

for (var n of fibonacci) {
// 在1000处截断序列
if (n > 1000) {
break;
}

console.log(n);
}
//==========================================================================

8.Map, Set, WeakMap, WeakSet
// Sets
let s = new Set();
s.add("hello").add("goodbye").add("hello");
// s.size === 2;
// s.has("hello") === true;

// Maps
let m = new Map();
m.set("hello", 42);
m.set(s, 34);
// m.get(s) === 34;

// Weak Sets
let ws = new WeakSet();
ws.add({data: 42});

// Weak Maps
let wm = new WeakMap();
wm.set(s, {extra: 42});
// wm.size === undefined;

Number.EPSILON
Number.isInteger(Infinity); // false
Number.isNaN("NaN"); // false

Math.acosh(3); // 1.762747174039086
Math.hypot(3, 4); // 5
Math.imul(Math.pow(2, 32) - 1, Math.pow(2, 32) - 2); // 2

"abcde".includes("cd"); // true
"abc".repeat(3); // "abcabcabc"

//==================================================================
9 .Math, Number, String, Array, Object APIs

Array.from(document.querySelectorAll("*")) // Returns a real Array
Array.of(1, 2, 3); // Similar to new Array(...), but without special one-arg behavior
[0, 0, 0].fill(7, 1); // [0, 7, 1]
[1, 2, 3].find(x => x === 3); // 3
[1, 2, 3].findIndex(x => x === 2); // 1
[1, 2, 3, 4, 5].copyWithin(3, 0); // [1, 2, 3, 1, 2]
["a", "b", "c"].entries(); // iterator [0, "a"], [1, "b"], [2, "c"]
["a", "b", "c"].keys(); // iterator 0, 1, 2
["a", "b", "c"].values(); // iterator "a", "b", "c"

Object.assign(Point, {origin: new Point(0, 0)});

//=======================================================================
10.Promises

Promises是一个异步编程库.
Promises是一个容器, 保存着某个未来才会结束的事件
(通常是一个异步操作)的结果.
function timeout(duration = 0) {
return new Promise((resolve, reject) => {
setTimeout(resolve, duration);
});
}

let p = timeout(1000).then(()=> {
return timeout(2000);
}).then(()=> {
throw new Error("hmm");
}).catch(err=> {
return Promise.all([timeout(100), timeout(200)]);
})

参考 : 微信公众号:  前端早读课   想学习的去支持关注一下. 内容比较倾向于工作和前沿JS

时间: 2024-08-10 17:00:08

ES6部分总结的相关文章

es6学习 -- 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. 我认为

ES6之主要知识点(六)数组

引自http://es6.ruanyifeng.com/#docs/array 1.扩展运算符(...) 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { return x + y; } var numbers = [4, 38]; add(...n

ES6简介

概述 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布,也叫ES2015. 语法提案的批准流程 新的语法从正式提案到正式成为标准,需要经历5个过程. Stage 0 - Strawman(展示阶段) Stage 1 - Proposal(征求意见阶段) Stage 2 - Draft(草案阶段) Stage 3 - Candidate(候选人阶段) Stage 4 - Finished(定案阶段) 一个提案进入Stage 2

es6的一些基本语法

首先说一下什么是es6: ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准; let 和 const 命令 let的基本用法: 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调用这两个变量,结果let声明的变量报错, var声明的变量返回了正确的值.这表明,let声明的变量只在它所在的代码块有效. const的基本用法: const声明的是一个常量,不能被修改,所以第二次声明后会报错! 数组的解构赋值: 之前最基本的写法是这样

js的ES6特性

一. let和const关键字 let出现之前,js所有的作用域都是以函数为单位的,只要在一个function里声明的var, 无论是for循环等块里面声明的还是在块外面声明的,整个function都可以使用这个var,比如: function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然可以引用变量i } 我个人的理解是js的提升特性,函数会将里面声明的所有var都提升到函数开始的地方,所以整个函数内都共享这些var. let

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

30分钟掌握ES6核心内容

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将

ES6之块级作用域

一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一术语--“变量提升(hoisting)”. 如下: function func(){ console.log(test); var test = 1; }; func(); 在node环境执行上述代码,结果为: 之所以为’undefined’,原因就在于‘变量提升’,在进入func函数时,将所有通过

[ES6] 03. The let keyword -- 1

var message = "Hi"; { var message = "Bye"; } console.log(message); //Bye The message inside the block still has impact on the outside. If you add function around the inside message: var message = "Hi"; function greeting(){ va

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /