一、关于变量

ES6新增:块级作用域变量

1、let定义块级作用域变量

  • 没有变量的提升,必须先声明后使用
  • let声明的变量,不能与前面的let,var,conset声明的变量重名
{   { console.log(a)    // 报错  必须先声明再使用let a = 10;       // 只在当前大括号可以使用var b = "abc";    // 全局作用域变量console.log(a);   // 10// let a = 10     // 报错 Uncaught SyntaxError: Identifier 'a' has already been declaredconsole.log(b);   // bac
   }console.log(b);      // abc  var 存在变量提升所以不会报错console.log(a);      // 报错 let 不存在变量提升 有作用域问题 只能在大括号中使用
}

2、const 定义只读变量

  • const声明变量的同时必须初始化赋值,一旦初始化完毕就不允许修改
  • const声明变量也是一个块级作用域变量
  • const声明的变量没有“变量的提升”,必须先声明后使用
  • const声明的变量不能与前面的let, var , const声明的变量重名
{const CONSTANT = 100console.log(CONSTANT) // 100 只能在括号里使用
} console.log(CONSTANT) // CONSTANT is not defined  报错  也是作用域问题

二、关于函数

1、ES6可以给形参函数设置默认值

就是说,当我们调用函数时,如果设置了默认形参,即使没给函数传入实参,那么函数的实参就是默认形参。

function fun2(a = 1, b= 2){console.log(a,b)  // 1,2
}
fun2(10,20);  // 10 20
fun2(100);   // 100 2  没有传参  则取初始默认值

在构造函数中也可是使用的

function Person(name, age, sex = "男"){this.name = name;this.age = age;this.sex = sex;
}
var p1 = new Person("张三", 20);
console.log(p1)     // Person {name: "张三", age: 20, sex: "男"}
var p2 = new Person("李四", 30);
console.log(p2)     // Person {name: "李四", age: 30, sex: "男"}
var p3 = new Person("王五", 20, "女");
console.log(p3)     // Person {name: "王五", age: 20, sex: "女"

2、箭头函数

// 正常函数
var fun3 = function(a){console.log(a);
}
// 箭头函数  区别在于 this 的指向    开发中建议都有箭头函数  能省去很多代码
var fun3 = (a)=>{console.log(a);}
fun3(999);

复习一下this的认识

1.在函数体外,this指的就是window对象
2.在函数替内,谁调用函数this就指向谁
3.在构造函数中,this指的是新创建的对象
4.在html标签中,this指的是当前的这个标签元素
5.在ES6中,对于箭头函数,它本身没有this,要看它在哪里创建的,和当前函数的作用域, 通俗说由执行上下文确定。

三、... 扩展运算符   可以将对象或者数组里面的值展开

1、对象用法

const a = [1, 2, 3] console.log(a) // 1 2 3 const b = {a: 1, b: 2} console.log({c: 3, ...b}) // {a: 1, b: 2, c: 3}

2、在数组之前加上三个点(...)

var arr = [1,2,3,4,5];
console.log(arr);    // [1, 2, 3, 4, 5]
console.log(...arr)  // 1 2 3 4 5

3、可以根据数组的展开运算用数组给函数批量的传参 (用的比较多)

function fun5(a,b,c,d,e,f){console.log(a,b,c,d,e,f)
}fun5([1,2,3,4,5])  // [1, 2, 3, 4, 5] undefined undefined undefined undefined undefine

fun5(...[11,22,33,44,55,66]) // 11 22 33 44 55 66

四、关于apply和call

apply和call,都是对象本身没有某个属性或者方法,去引用其他对象的属性或方法,也就是说两者都可以改变this的属性

不同之处

apply(this的指向,数组/arguments)
call(this的指向,参数1,参数2,参数3)

var name ="window的name";
var obj = {name:"obj的name",showName:function(v1,v2,v3){console.log(v1,v2,v3)}
}
obj.showName();
obj.showName.apply(window,[10,20,30]); // 10 20 30
// apply括号里的是谁,调用的前面的函数里面的this就是谁
obj.showName.call(window,10,20,30) // 10  20  30
var color = "yellow";
function showColor(){console.log(this.color)
}
var obj = {color:"red",
}
showColor(); // yellow
showColor.apply(obj); // red
showColor.call(obj); // red
showColor.apply(this); // yellow
showColor.call(window); // yellow

五、关于解构赋值

1、数组的解构赋值

  var [a,b,c] = [11,22,33]console.log(a,b,c)    //  11 22 33var [e,[f,g],k] = [1,[2,3],5]console.log(e,f,g,k)  //  1 2 3 5

2、对象的解构赋值

 var{name,age}={name:"张三", age:"20"}console.log(name, age)  //  张三 20
 // 以前我们互换两个变量的值,需要借助第三个变量,利用解构赋值,就方便很多了var f1 = 88;var f2 = 99;[f1,f2] = [f2 ,f1];console.log(f1, f2) // 99 88

3、解构json

 var jike = {"name":"tom","age":"23","sex":"男"};var {name,age,sex}=jike;console.log(name,age,sex)//tom 23 男function cal(a,b){var ret1 = a+b;var ret2 = a-b;var ret3 = a*b;var ret4 = a/b;return [ret1,ret2,ret3,ret4]}var [r1,r2,r3,r4] = cal(10,5);console.log(r1,r2,r3,r4)  // 15 5 50 2

六、创建对象

ES6中创建对象  class

class className{    // 肯定存在一个构造函数 constructor  如果不写构造函数,有一个默认的构造函数,内容为空constructor(){}  // 注意:这里不需要逗号// 下面是函数属性 比如属性有run  dark  函数和对象都可以
    run(){}dark(){}
}

举个例子

class Person{// 肯定存在一个构造函数 construtor
    constructor(name,age,sex,nativePlace){this.name=name; // 注意:这里是分号this.age=age;this.sex=sex;this.nativePlace=nativePlace;}// 下面是函数属性eat(){console.log("红烧排骨")}study(){console.log("英文")}play(){console.log("敲代码")}
}var sunShine = new Person("fanfan","22","女","黑龙江");
console.log(sunShine) // Person {name: "fanfan", age: "22", sex: "女", nativePlace: "黑龙江"}

七、Promise 对象是一个构造函数,用来生成Promise实例。

const promise = new Promise(function(resolve, reject) {if (/* 异步操作成功 */){resolve(value);} else {reject(error);}
});
// 成功
promise.then(data => {console.log(data );
});
// 错误  异常
promise.catch(error => {console.log(error );
});

八、Set()和Map()

set()有序列表集合(没有重复) 数组去重利器

Set()是指有序列表集合 (set中的元素是没有重复的)set包含的方法
add()、has()、delete()、clear()等add() 添加var s = new Set();
s.add(1);
s.add(window);
s.add(true);
s.add(1);
console.log(s);//一共三个元素
console.log(s.size)//数组的长度是3
delete(value) 删除指定元素//结合上栗
s.delete(window);
console.log(s)   //1  true
console.log(s.size)   //2
has( value )用来判断指定的值是否在set集合中
存在返回true 不存在返回false//结合上栗
console.log( s.has(1) )//true
clear() 同来清空set集合的//结合上栗
s.clear()
console.log(s)//此时为空
举个例子:生成10个1-20的随机数,要求不可以重复
var arr3 = new Set();while(arr3.size<10){var yuan = parseInt(Math.random() * (20 - 1 + 1) + 1);arr3.add(yuan);     }console.log(arr3)

Map() 用来存放键值对的集合

var map = new Map();
map.set("name","张三");
map.set("age",20);
console.log(map)    // Map {"name" => "张三", "age" => 20}
get(key)根据key值取得valueconsole.log( map.get("name"))  // 张三
has() 判断是否存在某个键值对
存在返回true 不存在返回fasleconsole.log( map.has("age") )  // true
console.log( map.has("age1") ) // false
clear() 清空集合map.clear();
console.log(map);//Map {}

九、模板字符串

const user = {name: '张三',age: 18
}
console.log(`My name is ${user.name} and age is ${user.age}`) // My name is 张三 and age is 18

十、for of 值遍历

var someArray = [ "a", "b", "c" ];
for (v of someArray) {console.log(v); // 输出 a,b,c
}

十一、Proxies  Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的操作。一下子让我们对一个对象有了很强的追踪能力,同时在数据绑定方面也很有用处

// 定义被侦听的目标对象
var engineer = { name: 'Joe Sixpack', salary: 50 };
// 定义处理程序
var interceptor = {set: function (receiver, property, value) {console.log(property, 'is changed to', value);receiver[property] = value;}
};
// 创建代理以进行侦听
engineer = Proxy(engineer, interceptor);
// 做一些改动来触发代理
engineer.salary = 60; // 控制台输出:salary is changed to 60

十二、 简述Es7

一、异步函数(async/await) 常用利器

var fs = require('fs');
var readFile = function (fileName){// 需要被await的话 就用promise包装return new Promise(function (resolve, reject){fs.readFile(fileName, function(error, data){if (error) reject(error);resolve(data);});});
};
// await 等待的是一个promise对象
var asyncReadFile = async function (){// 当 f1 执行完毕后 f2 才会执行var f1 = await readFile('/etc/fstab');var f2 = await readFile('/etc/shells');console.log(f1.toString());console.log(f2.toString());
}

二 、string中加入include方法

includes("字符"); 用于判断字符串中是否包含某个字符
存在返回true 不存在返回false

includes("字符",startIndex); 用于判断字符串中下标startIndex是否是某个字符
是返回true 不是返回false

var str = "hello";
console.log( str.includes("e") )     // true
console.log( str.includes("e",3) );  // false

三、求幂运算

console.log(3**2)  // 9

四、Object.values/Object.entries

Object.values和 Object.entries是在ES2017规格中,它和Object.keys类似,返回数组类型,其序号和Object.keys序号对应。
Object.values,Object.entries和Object.keys各自项返回是数组,相对应包括key,value或者可枚举特定对象property/attribute

五、字符填充函数padStart 和 padEnd

console.log('0.00'.padStart(20))           // 0.00
console.log('10,000.00'.padStart(20))      // 10,000.00
console.log('250,000.00'.padStart(20))     //  250,000.00

以上只是些个人认为比较常用的欢迎指正不对不足之处,  详细的可以看看阮一峰大神的特篇  http://es6.ruanyifeng.com/

转载于:https://www.cnblogs.com/ljx20180807/p/9872238.html

ES6 开发常用新特性以及简述ES7相关推荐

  1. 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节

    系列文章目录 文章目录 系列文章目录 前言 Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节 案例一:CDB+PDB环境启用扩展 案例二 ...

  2. 【SQL开发实战技巧】系列(四十七):Oracle12C常用新特性☞非分区表在线转分区表online clause(不停业务+索引有效)

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  3. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  4. 前端面试题二:ES6/7/8新特性、性能优化、数据交互、H5新特性

    目录 一.ES6/7/8新特性 二.性能优化 三.数据交互 四.H5新特性 一.ES6/7/8新特性 1.ES6中新增了哪些数据类型? Symbol类型(基本) Set类型(复杂) Map类型(复杂) ...

  5. C#: 8.0 和 9.0 常用新特性

    在<带你了解C#每个版本新特性> 一文中介绍了,C# 1.0 到 7.0 的不同特性,本文接着介绍在 8.0 和 9.0 中的一些常用新特性. C# 8.0 在 dotNET Core 3 ...

  6. 【小家java】java10新特性(简述十大新特性) 小步迭代

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  7. ES6常用新特性---笔记一

    ES6的新特性 1.定义函数不一定需要function 2.创建类,constructor 3.模块,JavaScript支持了原生的module,将不同的代码分别写在不同的文件,最后只需export ...

  8. ES6简介、新特性、Babel编译器、babel-cli工具、babel-polyfill工具(安装和使用)

    目录 简介 ECMAScript 的历史 ES6新特性 1.语法方面 2.功能方面 ​ Babel编译器 babel-cli工具 第一步:创建一个文件夹,名称为app,在vscode中打开终端,终端路 ...

  9. Java8常用新特性详解

    文章目录 Java8新特性纵览 Lambda表达式 为什么使用Lambda表达式? 简单使用 Lambda语法规则 函数式接口 什么是函数式(Functional)接口 如何理解函数式接口 Java内 ...

最新文章

  1. MyBatis——[注解方式]一对多查询DEMO
  2. 个人作业-Week2
  3. 447. Number of Boomerangs
  4. 『摄影欣赏』好萌了!12幅可爱的婴儿照片【组图】
  5. 转转首席架构师 孙玄:如何成为一个有情怀的工程师?
  6. Redis 学习笔记-雷云龙
  7. 小学生计算机课程设计,小学版3D建模课程设计
  8. 华创e路航固件_华创e路航地图官方版
  9. android Room框架学习
  10. aws linux使用ssh登陆_在Mac上通过ssh连接到amazon aws linux服务器
  11. 数据产品经理的具象化
  12. 04 带宽管理的队列规定
  13. Camtasia“喀秋莎”2022一款录屏神器
  14. 倍福PLC和C#通过ADS通信传输int类型变量
  15. 百度 Apollo 轨迹规划技术分享笔记
  16. 全国计算机等级考试office无纸化考试,全国计算机等级考试真题汇编与专用题库 二级MS Office高级应用 2016年无纸化考试专用...
  17. 蛋花花谈程序员年过四十该何去何从
  18. 世界首家《VOGUE》旗下婚纱店开业
  19. excel满足其中任何一个条件的筛选
  20. 本公众号将分享有关开关电源的仿真与计算

热门文章

  1. 位运算 c语言 头文件 linux,1. 位运算_C语言_C语言入门-Linux C编程一站式学习...
  2. datagridview滚动条自动滚动_掘金上摸鱼的新发现,无限滚动(infinitescroll)
  3. css 一侧是三角形的矩形_5种具有CSS形状和滤镜的精美图像效果
  4. python面向对象作业_python面向对象编程作业
  5. python插件使用教程_Python常用扩展插件使用教程解析
  6. django 类取消csrf_Django之Form组件详解、图片上传及定制
  7. aspnet是前端还是后端_项目开发中无法回避的问题:前端和后端如何合作和并行工作?...
  8. rust游戏解封了吗_柚子君宾馆爬墙听隔壁声,潇天傲解封不罢休!继续专场嘲讽散打哥...
  9. 机器值计算机组成,计算机组成原理_数据的机器运算.ppt
  10. 优朋普乐大数据_优朋普乐黑维炜:互动电视市场已进入成熟发展期