let:用来定义变量
特色:只能在代码块里面使用,let拥有块级做用域;而且let不容许重复声明; 好比:json
var a = 12; var a = 5; alert(a); //5; let a = 12; let a = 5; alert(a); //报错;Identifier 'a' has already been declared
代码块:{}包
起来的代码,造成了一个做用域,好比if,for,while,json除外;块级做用域; var 只有函数做用域;数组
用处: 自执行函数:app
for(let i = 0; i < aBtn.length; i++){ aBtn[i].onclick = function{ alert(i); //0,1,2 } }
*** 块级做用域其实就是匿名函数自执行;
const:通常用来定义常量
常量:不容许修改;有些时候定的变量不但愿被改变,这个不但愿被改变的值就是常量;好比:函数
let a = 5; a = 12; alert(a); //12;
其实但愿a的值是5,可是下面有相同的变量名字覆盖了let a的值;这个时候就要用到const;this
const一旦被赋值,之后再也没法修改,好比:spa
const a = 12; a = 5; alert(a); //Assignment to constant variable.
const必须给初始值,好比:code
const a; a = 12; alert(a); //Missing initializer in const
declaration; 正确的写法:对象
const a = 12;
由于const定义的变量之后再也无法赋值了;
const不能重复声明,好比:blog
const a = 12; const a = 5; alert(a); //Identifier 'a' has already been declared;
用途:防止意外修改变量;索引
关于字符串链接
以前定义字符串: var str = '';或者 var str = ""; ES6定义字符串:
var str1 = 'elcome'; var str2 = 'w';
ES6链接字符串:${变量名}
var str3 = '${str2}${str1}'; //输出:welcome;
解构赋值
ES6以前:
var a = 12; var b = 5; var c = 10; alert(a); //12
ES6:
var [a,b,c] = [12,5,10]; //数组的形式定义; alert(a); //访问某一项 console.log(a); //打印出所有的值; var {a,b,c} = { a: 12, b: 5, c: 10 }; //json的形式定义;跟顺序无关; alert(a); //访问某一项; console.log(a,b,c); //打印出所有的值;
使用ES6定义的时候注意模式匹配:
模式匹配:左边的样子和右边的同样;
var [a,[b,c],d] = [1,[3,4],5]; console.log(a,b,c,d);
解构赋值默认值的写法:
var {time=12,id=321} = {}; console.log(time,id);//这里的time和id都是默认值;
由于等号右边没有赋值;因此须要给默认值,若是不给默认值的的话是undefined;
Array.from:复制一个数组
var arr = [1,2,3,4]; var arr2 = Array.from(arr); arr2.pop; //删除arr2 中的某一项不会影响到arr; console.log(arr,arr2);
快速复制一个数组: ···
实例1:
var arr = [1,2,3,4]; var arr2 = [...arr1]; //引用arr1里面的内容; arr2.pop; console.log(arr2);
实例2:
function show(...args){ console.log(args); //1,2,3,4;这里的值也就是arguments的每个; args.push(5); //往arguments里面添加一个; console.log(args);//往arguments里面添加一个5,这在ES6以前是不容许的; } show(1,2,3,4);
新增循环 for of
for of 用来遍历(迭代/循环)整个对象;表现相似于for in;
var arr = ['banana','pear','orange','apple']; for(var i in arr){ //i是索引; console.log(i); //0,1,2,3,索引; } for(var i of arr){ //i是值; console.log(i); //banana,pear,orange,apple; }
for of 循环不能用来循环json,能够循环数组,for of的真正目的是为了循环map对象;实例以下:
var json = { 'a':'12', 'b':'11', 'c':'10', }; for(var name of json){ console.log(name); //json[Symbol.iterator] is not a function(…) }
for of 也能够循环数组: 只循环值:
for(var name of arr){ console.log (name) };
只循环索引:
for(var name of arr.keys){ console.log(name) };
索引和值都循环:
for(var name of arr.entries){ console.log(name) };
Map对象
和json类似,也是键值对的形式 key-value;Map对象主要是为了和for of循环配合而生。 怎么获得一个Map对象:
var oMap = new Map;
设置:
oMap.set (name,value); oMap.set(name,value); //给Map对象设置值; oMap.set ('a','banana'); oMap.set('b','pear'); console.log(oMap); //{"a" => "banana", "b" => "pear"}
获取:
oMap.get(name); oMap.get ('a'); //banana;
删除:
oMap.delete(name); oMap.delete('a');
循环Map用 for of:
var oMap = new Map; oMap.set('a','banana'); oMap.set ('b','pear'); oMap.set('c','orange'); oMap.set('d','apple'); for(var name of oMap){ ==>此种写法的本质就是循环了oMap.entries; console.log (name);//结果中不只有name,还有value; a,banana b,pear,c,orange d,apple }
==>此种写法等价于:
for(var name in oMap.entries){ console.log(name); }
//以key-value的形式取值:
for(var [key,value] of oMap){ console.log(key+':'+vlaue); //a:banana b:pear c:orange d:apple }
只循环key
for(var key of oMap.keys){ console.log(key); //a,b,c,d }
只循环value
for(var val of oMap.values){ console.log (val); //banana,pear,orange,apple }
箭头函数
ES6以前:
function show(a, b, c){ return a + b + c }
ES6:
=> 注意: 箭头函数里面的this指的是window; 在箭头函数中arguments不能使用了;
ES6:给默认值
var move==>{ console.log(obj); //undefined; //由于obj未传参;有些时候不但愿有undefined;这个时候须要给一个默认值; } move; var move=(obj='参数必须传递') => { console.log(obj); //参数必须传递; }