博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6整理
阅读量:6910 次
发布时间:2019-06-27

本文共 10496 字,大约阅读时间需要 34 分钟。

1.let

传统的变量声明都是用var        

eg:

(function(){
var i = 1; var i = 10; console.log(i); })(); ES6改用let变量声明 eg: (function(){
  let i = 2;   cosole.log(i); } 与var的区别: 1.let声明的变量只在当前代码块有效 2.同一代码块里不允许出现重名let变量 3.let特别适合用于循环(因为var声明的变量会有变量提升的情况) eg:
var arr = []; for(var i = 0;i < 10;i++){
  arr[i] = function(){
  console.log(i); } } arr[3]();//此时i=10
/****************************/
var arr = []; for(let i = 0;i < 10;i++){
  arr[i] = function(){
  console.log(i); } } arr[3]();//此时i=3
2.set (1)set是ES6新增的一种数据类型,语法特点与数组类似。
(2)与数组不同的是set数据结构里的所有数据都是唯一的。 eg: /******传统写法******/
var arr = [1,2,3,4,6,6,7,7,8]; /*传统遍历数组方法一*/ for(var i = 0;i < arr.length;i++){
  console.log(arr[i]);//此时输出1,2,3,4,6,6,7,7,8 } /*传统遍历数组方法二*/
arr1.map(function(val){
  console.log(val); });
/******set写法******/ var set = new Set(arr); /*set遍历数组方法*/ for(var element of set){//for in 循环不能遍历set集合,得用for of   console.log(element );//此时输出1,2,3,4,6,7,8 }
/*set添加数据方法*/ var set2 = new Set();
for(var i = 0;i <10;i++){
  set2.add(i*2); } console.log(set2); /*set将集合转换为数组 扩展运算符*/ var arr3 = [...set2]; console.log(arr3); /*清空和删除set*/ set2.delete(2);//没有索引,直接删除数据2 console.log(set2); set2.clear();//清空set2数据 console.log(set2); tip:为什么在删除的时候没有用索引? 因为set数组的索引和数据是一样的。 eg:   let set3 = new Set([1,7,9,4,2,3,4]);   set3.forEach(function(index,val){
console.log(index+":"+val);//此时结果是1:1  7:7  9:9   4:4    2:2   3:3   4:4   });
/*判断set中是否有对应数据*/ console.log(set3.has(9));//此时答案是true /*set数组长度*/ console.log(set3.size);//此时是6,set没有length的属性 3. weakSet
与set使用方式类似。但与set的不同的地方在于WeakSet只能保存对象类型的数据, 有add,clear,delete,has方法,但不能遍历,取值。 eg: let ws1 = new WeakSet();
let  num = new Number(5); ws1.add(5);//报错,因为5不是对象类型的数据 ws1.add(num);//不报错,因为num是对象类型的数据 4.const 用来声明变量,语法规则和let一样,但是const声明的变量不可修改,且只在当前的代码块有效, 同一代码块里不允许出现重名const常量。 eg:
(function () {
{
const PI = Math.PI; const n = 2; //n = 5; //同一代码块里不允许出现重名const常量 alert(n); let m = 3; m = 5; alert(m); } //alert(n); //const声明的常量只在当前的代码块有效 })(); 5.symbol ES6新增的一种数据类型,表示独一无二的值。 eg:
{
var a = "ccy"; var b = "ccy"; alert(a == b); } {
let a = Symbol("ccy"); let b = Symbol("ccy"); alert(a == b); } 6.map map也是ES6新增的一种数据类型,它的本质和对象一样都是键值对的集合。 与对象不同的是,它的键值可以是各种数据类型。
let map1 = new Map(); var obj1 = new Object(); var obj2 = new Object(); /*set方法 添加值*/ map1.set(obj1,"对象键值1"); map1.set(obj2,"对象键值2"); /*get方法获取值*/ console.log(map1.get(obj1)); console.log(map1.get(obj2)); /*has方法判断是否存在*/ console.log(map1.has(obj2)); /*delete方法删除数据*/ map1.delete(obj2); console.log(map1.size); /*clear清空数据*/ map1.clear(); console.log(map1.size);
/*数组作为构造函数参数*/ let arrMap = new Map([['name','ccy'],['age','18']]); console.log(arrMap); /*forEach遍历Map*/ arrMap.forEach(function(val,key){
console.log(key+":"+val); }); /*转换成数组 扩展运算符*/ let arr = [...arrMap]; console.log(arr); /*for of循环*/ for(let i of arrMap){
console.log(i); } /*键迭代器*/ let keys = arrMap.keys(); console.log(keys); for(var i = 0 ; i < arrMap.size; i++){
console.log(keys.next().value); } /*值迭代器*/ let vals = arrMap.values(); console.log(vals); /*获取map的大小*/ let size = arrMap.size; console.log(size); /*数字类型的键名*/ let ccy = new Map([[1,"zhangsan"],[2,"lisi"]]); ccy.forEach(function(val,key){
console.log(key+":"+val); }); 7.weakMap
weakMap和Map相似,但是区别是weakMap只能接收对象键值的数据   eg:   let wm = new WeakMap();   let obj = new Object();   obj.name = "name";   wm.set(obj,"hello");   console.log(wm.has(obj));   console.log(wm.get(obj));   wm.delete(obj);   console.log(wm.get(obj)); 8.Arrow
/*标准函数定义形式*/ function show(){            //无参     console.log("hello"); } show(); /*箭头函数写法*/ let show2=()=>{             //无参     console.log("hello"); } show2(); /*标准写法*/
function showName(name){    //有参
console.log(name); } showName("ccy"); /*箭头函数写法*/ let showName2=(name)=>{     //有参     console.log(name); } showName2("ccy"); /*标准写法*/ function add(a,b){          //有参有返回值     return a+b; } console.log(add(2,3)); /*箭头函数写法*/ let add2=(a,b)=>a+b;        //有参有返回值 console.log(add2(2,3)); /*标准写法*/ function add3(a,b){         //有参有返回值有输出操作     console.log("我是加法运算");     return a+b; } console.log(add3(2,3)); /*箭头函数写法*/ let add4=(a,b)=>{          //有参有返回值有输出操作     console.log("我是加法运算");     return a+b; } console.log(add4(2,3)); 看惯了标准函数,箭头函数看起来是不是很难看,那ECMA设计它来干什么?? 箭头函数可以优化对this的操作,它对this的处理与一般的普通函数不一样。 箭头函数的this始终指向函数定义时的this,而不是执行时。 var obj = {
data:"我是测试数据", fun:function(){
console.log(this.data);//this指向谁? }, fun2:function(){
setTimeout(function(){
//console.log(this); this.fun(); },1000); } } obj.fun(); //obj.fun2() //报错! 因为定时器函数里的this的指向已经发生偏移,指向window对象 /*用箭头函数解决这个问题*/ var obj2 = {
data:"我是测试数据", fun:function(){
console.log(this.data); }, fun2:function(){
setTimeout(()=>{//匿名函数 没有参数 this.fun(); },1000); } } obj2.fun(); obj2.fun2(); 9.promise
function fun1(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("我是函数1"); resolve(111); //reject("函数1发生错误"); param = "我是函数1的数据";//往后面的函数传递参数 },4000); }); } function fun2(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("我是函数2"); console.log(param); resolve(222); },3000); }); } function fun3(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("我是函数3"); console.log(param); resolve(333); },2000); }); } function fun4(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("我是函数4"); console.log(param); },1000); }); } fun1().then(function(data){
console.log(data);//fun1的resolve传递的数据 }).then(fun2).then(function(data){
console.log(data) }).then(fun3).then(function(data){
console.log(data) }).then(fun4).then(function(data){
console.log(data); }).catch(function(err){
console.log(err); if(err == "函数1发生错误"){
//fun2().then(fun3).then(fun4);//哪怕函数1发生错误,我也也可安排函数继续往下进行。 } }); 10.Iterator
/*声明一个数组*/ let arr = [1,2,3,4,5]; /*声明一个遍历器*/ let it = arr[Symbol.iterator](); for(;;){
let ele = it.next(); if(ele.done == true){
break; } console.log(ele.value); } /*能使用遍历器的有数组、对象、set和map,能使用遍历器的,就可以使用for of*/ for(var i of arr){
console.log(i); } /*展开运算符*/ var newArr = [...arr]; console.log(newArr); 11.generator
/*每一个yeild语句定义不同的状态,它是一个代码执行暂停标识。 return也是定义了一个状态。*/ function* show(){
yield "第一个阶段"; yield "第二个阶段"; yield "第三个阶段"; yield "第四个阶段"; return "end"; } /*调用show函数,函数不会立即执行,而是返回一个遍历器对象*/ var itFunction = show(); /*对遍历器对象依次调用next()去执行*/ console.log(itFunction.next()); console.log(itFunction.next()); console.log(itFunction.next()); console.log(itFunction.next()); console.log(itFunction.next()); function* show2(){
yield function fun1(){
setTimeout(function(){
console.log('chenchuanyin'); },1000); }; yield function fun2(){
console.log("ccy"); } } var itFun = show2(); var fun1 = itFun.next().value; var fun2 = itFun.next().value; fun1(); fun2(); 13.destructuring
/*数组解构赋值*/ function arr(){
{
/*完全解析*/ let [a,b,c] = [1,2,3];//普通 console.log(a+":"+b+":"+c); let [a1, [[b1], c1]] = [1, [[2], 3]];//嵌套 console.log(a1+":"+b1+":"+c1); let [ , , third] = ["foo", "bar", "baz"]; console.log(third); let [x, , y] = [1, 2, 3]; console.log(x+":"+y); /*不完全解析*/ let [x1, y1] = [1, 2, 3]; console.log(x1+":"+y1); let [x3,, y3 = "cc", z3 = "ccy"] = [1, 2, 3]; console.log(x3+":"+y3+":"+z3); let [a2, [b2], d2] = [1, [2, 3], 4]; console.log(a2+":"+b2+":"+d2); } }; arr(); /*对象解构赋值*/ function obj(){
/*对象的属性没有次序,变量必须与属性同名,才能取到正确的值*/ let {foo, bar ,arr:[name,age,id="001"]} = {foo: "aaa", bar: "bbb" ,arr:["zhangsan","18"]}; console.log(foo+":"+bar+":"+name+":"+age+":"+id); } obj(); /*字符串解构*/ let [q,w,e] = "ccy"; console.log(e); /*函数参数解构*/ let funObj = {
name:"ccy", age:"18" }; function show({name,age,id="002"}){
console.log(name+":"+age+":"+id); } show(funObj); 14.class
/*之前语法定义类*/ /*定义一个类*/ function Person(name,age,add){
this.name = name; this.age = age; this.add = add; this.say = function(){
console.log(this.name+":"+this.age+":"+this.add); } } /*定义鼎泰属性和静态方法*/ Person.node = "ccy"; Person.run = function () {
}; /*实例化出来一个对象*/ var student1 = new Person("王**",28,"福山区"); student1.say(); /*ES6定义类的语法*/ class Human{//定义类名 constructor(name,age,add){//构造函数 this.name = name; //成员属性 this.age = age; this.add = add; this.say = function(){ //成员方法 console.log(this.name+":"+this.age+":"+this.add+":1"); }; /*方法重载:在同一个类里面,方法名相同,参数列表不一样。 但是这里没有重载!!!只是覆盖!*/ /*this.say = function (id,no) {
console.log(this.name+":"+this.age+":"+this.add+":"+":2"); }*/ } /*静态属性和方法*/ //static 'n' = "jereh"; static sayName(){
console.log("我是类方法!"); } } let student2 = new Human("龚*",27.5,"莱山区"); //Human.sayName(); student2.say(); student2.say("10001","1608"); //console.log(Human.n); Human.sayName(); /*继承*/ class Animal{
constructor(kind){
this.kind = kind; } say(){
console.log(this.kind+"也会说话"); } } let dog = new Animal("狗"); dog.say(); class Dog extends Animal{
/*如果又自定义构造函数,一定注意调用super()*/ constructor(kind,CatchR){
super(); this.kind = kind; this.CatchR = CatchR; } /*之前的方法不能满足需要,这里进行 重写 !!*/ say(){ //方法的重写 console.log(this.kind+"汪汪!"+this.kind+"追"+this.CatchR); } } let dog2 = new Dog("狗","兔子"); dog2.say(); class Cat extends Animal{
constructor(kind,EatFish){
super(); this.kind = kind; this.EatFish = EatFish; } say(){
console.log(this.kind +"喵喵!"+this.kind+"吃"+this.EatFish) } } var cat = new Cat("猫","鱼"); cat.say();
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/chencuixin/p/6506188.html

你可能感兴趣的文章
【转】PHP网站(nginx、php-fpm、mysql) 用户权限解析
查看>>
Spring Boot项目的打包和部署
查看>>
元素绝对居中终极办法兼容IE8
查看>>
weblogic 的应用 常见问题处理 db2 链接不上(转载)
查看>>
linux下的Shell编程(5)循环
查看>>
Switch 语句
查看>>
[PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索(二)
查看>>
二叉堆
查看>>
Java中的Enum的继承
查看>>
[Android]RecyclerView的简单演示样例
查看>>
怎样在Java中运行Hive命令或HiveQL
查看>>
使用enca进行字符集转码
查看>>
Ubuntu下安装Oracle JRE运行环境
查看>>
docker 标记和推送镜像
查看>>
Mapreduce实战:序列化与反序列化 int,int[],string[][]
查看>>
可执行文件格式elf和bin
查看>>
Android中获取当前位置的使用步骤
查看>>
CEF中JavaScript与C++交互
查看>>
unity3d绘画手册-------灯光之反射及各个参数解释
查看>>
深入理解程序的结构
查看>>