简介:
ECMAscript6是javascript语言的下一代标准,于2015年6月发布,为了使JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
1.let命令定义变量
a.let没有声明提前
console.log(a) let a = 10 //此时打印台会报错,访问的是window,window上无a
b.let具有块级作用域,声明的变量只在let命令的代码快内有效
{ let a = 10 console.log(a)//打印10 } console.log(a);//回报错,无法访问到a
但此时的let非常适合for循环
如果是var的话由于预编译函数还未执行时i的值已经是10了
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 传入0-9打印的都是10;
let就不会出现这样的情况了
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 打印6
c.var如果重复声明,后面会覆盖前面,现在 let不允许重复声明
2.const定义常量
一旦声明,常量的值就不可改变
const p = 1; console.log(p);//1 p = 3; console.log(p)//报错
const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
const p; console.log(p);//报错
3.字符串的拼接
var uname = "jack" var str = "" str += "<ul> <li> " + uname + "</li> <li>nan</li> <li>18</li> <li>150123456878</li> <li>xxx@xxx.com</li> </ul>" // 切换成: str += `<ul> <li>${uname}</li> <li>nan</li> <li>18</li> <li>150123456878</li> <li>xxx@xxx.com</li> </ul>`
4.数组的复制 --- ...超引用
var arr = [1,2,3,4,5]; console.log(...arr)//1 2 3 4 5 // ... 超引用 var arr4 = [...arr];//新数组 console.log(arr4)
5.解构赋值
// 解构,数组的格式 var [a,b,c] = [40,20,30]; console.log(a,b,c)//40 20 30 var [a,[b,c],d] = [5,[10,20],30]; //格式对应即可 console.log(a,b,c,d)//5 10 20 30 // json格式 var {a,b,c} = {a:10,c:30,b:20}; //可以调换顺序 console.log(a,b,c);//10 30 20 // 解构 var [{a,b},c,[d,e],f] = [{b : "jack",a : "100"},5,[10,20],30]; console.log(a,b,c,d,e,f)//100 jack 5 10 20 30
6.循环
for of循环只能用来遍历数组,不可以遍历obj
var arr = ["red","green","blue","yellow","black"]; for(var i of arr){ console.log(i); //输出的直接是值 }
7.Map对象
// map就是用来存东西的,跟obj类似 var map = new Map(); console.log(map); map.abc = "jack"; map.age = "100"; console.log(map); // 设置值 增 该 map.set("a","red"); map.set("b","green"); //查 console.log(map.abc); console.log(map.get('a')); // 删除 delete map.abc; delete map.a; map.delete("a"); console.log(map)
8.箭头函数
只是写法上改变了
// var fun = function(){ // } var fun = () => { console.log('hello')//hello } fun()
9.promise对象
主要是用来处理异步数据的
在promise中,有三种状态,但只有两种可能
pending(等待,处理中) ---> resolve(完成)
---> rejected(失败,拒绝)
const promise = new Promise(function(resolve, reject) { if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } });
Promise
生成以后,可以用then
方法分别指定resolved
状态和rejected
状态的回调函数。
promise.then(function(value) { // success }, function(error) { // failure });
//all // 只有当所有的promise全部成功才能走成功,否则失败 var p1 = Promise.resolve(10); var p2 = Promise.resolve(20); var p3 = Promise.reject(30); Promise.all([p1,p2,p3]).then(function(data){ console.log(data); },function(err){ console.log(err); })
// race也是返回一个promise对象 // 获取最先得到的结果,得到以后就不去执行了 var p1 = new Promise(function(resolve,reject){ setTimeout(resolve,100,"first"); }) var p2 = new Promise(function(resolve,reject){ setTimeout(resolve,50,"second"); }) Promise.race([p1,p2]).then(function(val){ console.log(val)//second })
var p1 = Promise.resolve(10); var p2 = Promise.resolve(p1); //成功的promise里面可以传递一个成功的promise对象 p2.then(function(data){ console.log(data);//10 })