ES6新属性

ES6为ECMA(European Computer Manufactures Association 欧洲计算机制造联合会) Script6的简写,推出于2015年。而ES5在IE8以下版本是不支持的,如trim()截取前后字符串的方法就不支持。

1、let

在ES6推出后,我们可以使用let声明一个变量,像var那样。不过两者也有不同之处。首先,let声明没有变量提升,并且变量不能重复声明:

console.log(a);
let a = "zhar";

let c = 10;
let c = 20;
console.log(c);

所以,上面两种情况都会报错。
let在for循环中声明的变量为局部变量,只存在于这个块级作用域中,循环之外不存在这个变量,所以可以用来避免了for循环那个经典的BUG:

for (let i = 0;i < 5;i++) {
    arr[i] = function () {
        console.log(i);
    }
}
//console.log(i);
arr[3]();

let声明的变量为块级变量(块级作用域),和外部声明的同名变量互不影响,称为暂时性死区

var e = 100;
function fun() {    
    let e;
    e = 200;    
    console.log(e);//200
}
fun();
console.log(e);//100

2、const

const为constant(常量)的缩写,用来声明一个常量。常量为一个固定值,如:PI,并且通常用全大写的字母来表示这是一个常量。一旦声明必须赋值,并不可更改,其它和let一致。如:

var PI = 3.14;

3、arrow箭头函数

函数的新写法
代码如下:

var fun = function() {
    return 10;
}
fun();

let foo = ()=>10;
console.log(foo());

let bar = (a,b)=>a*b;
console.log(bar(10,20));

let a = (a,b)=>{
    return a+b;
}
console.log(a(33,44));

function b (callback) {
    callback();
}
b(function () {
    console.log(1111);
})

b(()=>{console.log(222)});
  • 箭头函数能保留当前的作用域
  • 使用箭头函数声明的函数,其作用域为 声明时所在的位置(作用域);
  • 箭头函数没有自己的this,没有自己的作用域,作用域来自于所在的作用域
  • 不能使用new关键字
  • 不能使用arguments

我们可以利用这些属性,在函数里的定时器中使用函数中的this:
之前的写法为

let obj = {
    name : "zhar",
    say : function () {
        console.log(this.name);
        var _this = this;
        setTimeout(function () {
            console.log(_this.name);
        },0);       
    }
}
obj.say();

现在的写法

let obj = {
    name : "zhar",
    say : function () {
        console.log(this.name);
        var _this = this;
        setTimeout(()=>console.log(this.name),0);
    }
}
obj.say();

4、template模板字符串

我们可以使用template来方便的书写一个便签和字符串等。如:

let name = "zhar";
var str = `
    <div>
        <span>${name}</span>
    </div>
    abc
    def
`;
console.log(str);

5、object

为声明变量提供了更加方便的方法,直接上代码:

//var name = "zhar";

//var obj = {
//  name : name
//}
//
//console.log(obj);
//
////解构
//let age = 30;
//
//let obj2 = {name,age};
//
//console.log(obj2);
//
//let n = "nnn"
//let obj3 = {n,age};
//console.log(obj3);
//
//let obj4 = {nn:"2n",n,age}
//console.log(obj4);

//let obj5 = {name:"zhar",age:30};
////let{name,age} = obj5;
//let{name} = obj5;// === let name = obj5.name;
//console.log(name);


var obj6 = {name:"liu",age:30,address:"北京"}
function fun ({name,age,address}) {
    //var name = obj.name;var age = obj.name;var address = obj.address;
    console.log(name,age,address)
}
fun(obj6);

为对象添加某个之前声明了的属性,只需将属性名写在花括号里就可以啦

6、Set&Map

Set和Map分别用来声明一个数组和对象。
Set和Array类似,不过没有重复的元素,并且无length属性:

let s = new Set([2,2,3,3,4,4,5]);
console.log(s);

let s2 = new Set();
s2.add(1);

add() 添加元素
delete() 删除元素
has() 是否包含元素
size 得到集合长度
clear() 清空集合

Map用法和Set类似,并且以上方法也存在:

let m = new Map();
m.set("name","zhar");
console.log(m);
console.log(m.get("name"));

//Map  可以使用任意类型做键,哪怕时候函数对象都行
let a = 10;
m.set(a,"abc");
console.log(m);
//$("div").length;
//$("div").size;

7、Array.from() 方法

之前我们要将类数组(如:arguments,string,NodeList--querySelectAll选择的内容)转为数组需要用的方法为Array.prototype.slice.call(arguments);,而现在只需用**Array.from() **方法将arguments转为数组:

function fun () {   
    console.log(arguments); s   
    let a = Array.from(arguments);
    a.push("d");
    console.log(a);//[a,b,c,d]
    
    
}
fun("a","b","c");

let b = Array.from("hello");
console.log(b)//[h,e,l,l,0]

8、default默认参数

函数需要接收一个参数,而没有传参时需要给设置一个默认值时的方便写法。

之前的写法

function fun(a) {
    //a=a或0,不传参数为0
    a = a || 0;
    return a/5;
}
console.log(fun(3));
console.log(fun());

现在的写法

//参数默认值,不传参数时,执行等于0
function bar (a=0) {
    return a/5;
}
console.log(bar());
console.log(bar(10));

只需写成 a=0 即可

9、class声明构造函数

ES6中,声明到构造函数本身的属性只需声明在constructor中,而声明到原型上的属性直接写在花括号里即可,并且提供了继承的方法:

class Person{
    constructor () {
        this.age = 30;
        this.name1 = "jack";
    }
    say(name){//Person.prototype.say
        console.log("你好:"+name+this.age);
    }
    say1() {
        
    }
}
//var p = new Person();
//p.say("Tom");

//继承时,是没有this的,没有执行环境的,必须调用super()来继承父级的this
class Student extends Person {
    constructor (age) {     
        super();
        this.age = age;
    }
}

let s = new Student(300);
s.say("小明");

10、reset运算符

为了替换arguments而出现的方法。
可以使用... 来获取剩余参数,如:

function fun(d,e,...a) {
    //可以使用arguments接收
    console.log(d,e,a)
}
fun(1,2,3,4,5,6);

... 扩展运算符

let arr = [2,3,4,5];
let arr2 = [6,7,8]
console.log(...arr);//2 3 4 5

连接两个数组

let arr = [2,3,4,5];
let arr2 = [6,7,8];
//原生的写法
//console.log(arr.concat(arr2));
console.log([...arr,...arr2]);

扩展运算符将arguments转为数组

function foo (x,y,z) {  
    console.log([...arguments]);
}

11、Promise

在ES6中,使用Promise模块来模拟异步请求时,函数层层嵌套的情况:

//promise 承诺

//ES5
//function fun (callback) {
//  //用 setTimeout 替代一个异步执行的内容  ajax
//  //异步: 不可预估返回结果时间
//  setTimeout(function () {
//      console.log("异步--执行完成");
//      callback("异步--给你的结果");
//  },1000)
//}
////回调函数
//fun(function (res) {
//  console.log(res);
//});


//promise语法:
//let promise = new Promise(function (resolve,reject) {
//  if (true) {//异步操作成功
//      resolve();
//  }else {
//      reject();
//  }
//});
//
//promise.then(function () {
//  console.log("成功");
//},function () {
//  console.log("失败");
//});

function sync1 () {
    return new Promise(function (resolve,reject) {
        setTimeout(function () {
            if (5 > 4) {
                resolve("异步一: 大于");
            }else {
                reject("异步一: 小于");
            }
        },1000)
    })
}
function sync2 (result) {
    return new Promise (function (resolve,reject) {
        setTimeout(function () {
            if (true) {
                resolve("异步二: true");
            }else {
                reject("异步二: false");
            }
        },2000)
    })
}
function sync3 () {
    return new Promise (function (resolve,reject) {
        setTimeout(function () {
            if (true) {
                resolve("异步三: true");
            }else {
                reject("异步三: false");
            }
        },4000)
    })
}
//sync1().then(function (res) {
//  //console.log(abc);
//  console.log(res);
//  return sync2(res);
//},function (err) {
//  console.log(err);
//}).then(function (r2) {
//  //抛出错误
//  //throw new Error("错误啦!")
//  console.log(r2);
//  return sync3();
//}).catch(function () {
//  //e为错误信息
//  console.log("catch异常",e);
//}).then(function (r3) {
//  console.log(r3);
//  return "abc";
//}).then(function (r4) {
//  console.log(r4);
//  return "def"
//}).then(function (r5) {
//  console.log(r5);
//}).catch(function () {
//  console.log("异常");
//});

//Promise.all([promise1,promise2,promise3,...])  全部异步函数执行完成后调用  result
//以最慢者为准

//Promise.all([sync1(),sync2(),sync3()]).then(function (res) {
//  console.log(res);
//});

//Promise.race()  竞赛模式  以最快者为准   只返回最快的结果
Promise.race([sync1(),sync2(),sync3()]).then(function (res) {
    console.log(res);
});


//箭头函数的写法
//sync1().then((res) => sync2(res)).then((r2) =>console.log(r2));

//有错误时直接进入到catch块,后面代码还会执行
//try{
//  
//}catch(e){
//  //TODO handle the exception
//}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容