ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

let与const

1、let用来定义变量,const用来定义常量。

2、有块级作用域

for(let i=0;i<5;i++){
setTimeOut(()=>{
console.log(i);//0-4
}, 3000)
}

vs

for(var i=0;i<5;i++){
setTimeout(()=>{
console.log(i);//55555
}, 3000)//用闭包解决
}

写到这里之前有一次面试的时候,一个面试官说let的块级作用域是怎么实现的?

这个问题其实是在blue的ES6课程上有讲过,就是let相当于实现了一个闭包来解决块级作用域

if(true){
let test = 1;
}
console.log(test);//test is not defined
if(true){
var test1 = 2;
}
console.log(test1);//2

3、没有变量提升

console.log(a);
var a = 1;//undefined
console.log(b);
let b = 2;//b is not defined

4、暂时性死区

var i = 2;
{
var i = 1;
}
console.log(i);//1 let z = 2;
{
let z = 1;
}
console.log(z);//2

箭头函数

普通函数

  • 属于谁,谁调用,指向谁,故指向obj

    区别:
var obj = {
a: function(){
console.log(this);
console.log(1);
}
}
obj.a();//执行obj中的a()函数
obj.a;//函数本身

)

箭头函数

  • 没有独立的作用域,即没有自己的this,指向obj的作用域window
var obj = {
b: function(){
//属于谁,谁调用,指向谁,故指向obj
console.log(this);
},
a: ()=>{
//没有自己的this,指向obj的作用域window
console.log(this);
}
}
obj.b();
obj.a();

  • 不能做构造函数
let Animal = function(){};
let animal = new Animal(); let Animal = ()=>{};
let animal = new Animal();
  • 没有prototype
let commonFn = function(){};
let arrowFn = ()=>{};
console.log(commonFn.prototype);//{constructor: ƒ}
console.log(arrowFn.prototype);//undefined

模板字符串

基本用法

let name = 'Jomsou'
let str = `
<div>
<h1 class="title">${name}</h1>
</div>
`;
document.querySelector('body').innerHTML = str;

Promise

Promise的那些事儿

class

ES6开始,JavaScript正式有了类的概念,用类来实现面向对象。

关键字:class、constructor、extends、super

class Person {
constructor(name,age){
this.name = name;
this.age = age;
}
getName(){
return this.name;
}
getAge(){
return this.age;
}
} class Man extemds Person {
constructor(name, age, sex){
super(name, age);
this.sex = sex;
}
getSex(){
return this.sex;
}
}

Object

Object.keys():返回对象的key值数组

Object.assign(): 整合,浅拷贝

//以前
var name = 'Jomsou';
var age = 23;
var obj1 = {
name: name,
age: age,
getName: function() {
return this.name;
}
}
obj1.getName();
let name = 'Jomsou';
let age = 23;
let obj = {
name,
age,
getName(){
return this.name;
},
['get'+'Age'](){
return this.age;
}
}
Object.keys(obj)

Symbol

一种基本的数据类型,创建后的值是唯一的

1、Symbol的创建

var sy = Symbol(value)

2、Symbol有toString方法

console.log(Symbol('1').toString())//'Symbol(1)'

3、Symbol可以转化成boolean

console.log(!Symbol);//Symbol可以转化成boolean

4、Symbol不能转化成数字

console.log(Symbol(1)+1);//error

5、相同的key值的Symbol.for创建symbol相等

let zf2 = Symbol.for('zhufeng');
let zf3 = Symbol.for('zhufeng');
console.log(zf2==zf3)

6、Symbol.keyFor只能找出有Symbol.for创建的symbol

let zf2 = Symbol.for('zhufeng');
let zf3 = Symbol.for('zhufeng');
console.log(zf2==zf3)//相同的key值的Symbol.for创建symbol相等
console.log(Symbol.keyFor(zf2));
console.log(Symbol.keyFor(sy1));//Symbol.keyFor只能找出有Symbol.for创建的symbol

eg:

var sy1 = Symbol();//Symbol的创建, var sy = Symbol(value)
var sy2 = Symbol();
console.log(typeof sy1);
console.log(sy1 == sy2);
let obj = {
sy1: 'haha',
[sy1]: 'zf'
};
obj[sy2] = 'zf';
console.log(obj);
//console.log(Symbol(1)+1);
console.log(!Symbol);//Symbol可以转化成boolean
console.log(Symbol('1').toString())//Symbol有toString方法
let zf2 = Symbol.for('zhufeng');
let zf3 = Symbol.for('zhufeng');
console.log(zf2==zf3)//相同的key值的Symbol.for创建symbol相等
console.log(Symbol.keyFor(zf2));
console.log(Symbol.keyFor(sy1));//Symbol.keyFor只能找出有Symbol.for创建的symbol

Set

1、类似数组 只有value 没有键key

2、通过构造函数方式创建一个Set实例

var s1 = new Set([1, 2, 3, 4, 5]);
var s2 = new Set("12345");

3、参数是一个数组(或者是类似数组只要是有iterable接口)

4、有iterable接口: 数组、arguments、元素集合、Set、Map、字符串

var arr1 = [1, 2, 3, 4, 5];
console.log(arr1);
var s1 = new Set([1, 2, 3, 4, 5]);
var s2 = new Set("12345");
console.log(s1);
console.log(s2);
function fn(){
console.log(new Set(arguments));
}
fn(1, 2, 3, 4, 5);

5、会默认去重

function unique(arr){
var arrSet = new Set(arr);
return Array.from(arrSet);
//return [...new Set(arr)];
}
console.log(unique([1, 1, 2, 5, 2, 5, 6, 5]));//[1, 2, 5, 6]

6、size->个数

add->如果之前没有,则加上,有就不加,返回增加后的Set实例 (可以实现链式写法),参数一次一个

clear->情况, 没有返回值,undefined,没有参数

delete->删除,返回值是布尔值 如果里面有这一项删除成功true, 没有这一项删除失败false

has->判断有没有此项,返回布尔值

s1.add('jomsou');
s1.add(1);
console.log(s1);
var b = s1.delete(1);
var c = s1.delete(10);
console.log(b+' '+ c+' '+s1);
console.log(s1.has(5));

forEach->遍历

Set实例只有value没有key

item,index: 当前项value

entires: 当前Set实例

s1.forEach((item, value, entries)=>{
console.log(item, value, entries);
})

keys->遍历接口

key: 仍然是value

values

entries->[item, val]

for(var key of s1.keys()){
console.log(key);
}
for(var val of s1.values()){
console.log(val);
}
for(var entrie of s1.entries()){
console.log(entrie);
}
console.log(s1.clear())

应用

//并集
function add(arr1, arr2){
return [...new Set([...arr1, ...arr2])];
}
console.log(add(arr1, arr2));
//交集
function same(arr1, arr2){
return arr1.filter(item=>arr2.includes(item));
}
console.log(same(arr1, arr2));
//差集
function diff(arr1, arr2){
return add(arr1, arr2).filter(item=>!same(arr1, arr2).includes(item))
}
console.log(diff(arr1, arr2));

ES6知识总结的更多相关文章

  1. es6知识总结--3

    es6知识总结--3 es6对咱们es3,es5的数据类型进行了升级下边说新APIs! js数据类型有Number.String .oject.Boolean.Null.Undefined六种数据类型 ...

  2. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  3. ES6知识整理(4)--数组的扩展

    最近工作比较忙,基本每天都会加班到很晚.处理一些客户端兼容问题以及提升用户体验的优化.也将近一周没更文了,现在继续es6的学习总结. 上篇回顾 ES6知识整理(三)--函数的扩展 扩展运算符 形式是3 ...

  4. 前端项目中常用es6知识总结 -- Async、Await让异步美如画

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  5. 前端项目中常用es6知识总结 -- Promise逃脱回调地狱

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  6. 前端项目中常用es6知识总结 -- let、const及数据类型延伸

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const  2 ...

  7. ES6知识整理(1)--let和const命令

    最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是正在的学到了... 那么现在开始 LINK START!(首先是第一讲,前 ...

  8. 开发中常用的es6知识

    结合实际开发,开发中常用的es6的知识: 1.新增let和const命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效: cons ...

  9. ES6知识整理(10)--class的继承

    (这是es6的第10篇文章.说真的这样的总结之后虽然直观了许多,但是消耗的时间有点长,或许是知识比较复杂的原因吧) 类的继承 有个A类,B类继承A类,那B类实例就可以使用A类实例的所以属性和方法.不包 ...

  10. ES6知识整理(5)--对象的扩展

    个人开这个公众号的初心是为了积累知识,因此并没有做什么推广,再说自己也不知道怎么推广,推广之后又能干些什么.已经将近10天没发文章了,虽然每天都加班,但也不会一点时间都没有,有时还是会懒癌发作不想学习 ...

随机推荐

  1. Centos&Redhat下bcm43142博通无线网卡linux驱动之二

    上次通过更换内核实现成功编译驱动无线网卡,但是启动到系统原内核下依然没有bcm43142的驱动,遂准备在原内核下编译驱动,记录一下 ps:更推荐这种方法,避免因更换内核出现其他兼容性问题 1.准备驱动 ...

  2. final可以修饰类、属性、方法。

      当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生.   当利用final修饰一个属性(变量)的时候,此 ...

  3. 认识 SSH 密钥对

    SSH 密钥对是阿里云为您提供的新的远程登录 ECS 实例的认证方式. 相较于传统的用户名和密码认证方式,SSH 密钥对有以下特点: 仅适用于 Linux 实例: SSH 密钥对登录认证更为安全可靠: ...

  4. Linux环境设置IP及关闭防火墙

    确认当前网络配置: [root@localhost ~]# nmcli -p dev ===================== Status of devices ================= ...

  5. 【Python】博客信息爬取-微信消息自动发送

    1.环境安装 python -m pip install --upgrade pip pip install bs4 pip install wxpy pip install lxml 2.博客爬取及 ...

  6. docker 应用-4(swarm模式搭建集群)

    swam模式 使用docker的swarm模式,可以很方便的搭建docker engine集群.docker engine是docker 容器的运行时环境,可以在docker engine上build ...

  7. Factory——工厂方法

    一.定义 GOF上对工厂方法的意图如此描述:定义一个用于创建对象的接口,让子类决定实例化哪个类.Factory Method使一个类的实例化延迟到其子类. 作为类的开发者,我们通常会在类中提供构造器方 ...

  8. Xcode - 因为证书问题经常报的那些错

    1.确认下证书是不是开发证书,如果是发布证书就会出现这样的提示. 2.证书失效了,去开发者中心重新生成一个. 3.包标识符不与描述文件包含的包标识符不一致,按照它的提示换一下就好了,最好不要点 Fix ...

  9. nw.js---开发一个百度浏览器

    使用nw.js开发一个简单的百度浏览器就很简单了,只需要在配置里面写入: { // "main": "index.html", "main" ...

  10. pymysql.err.InterfaceError: (0, '')解决办法

    导致这个错误的原因是通过pymysql连接MySQL,没有关闭连接的操作,所以短时间内不会出问题,长时间保持这个连接会出现连接混乱.虽然看着自己的代码没错,还是会报 pymysql.err.Inter ...