ES6新特性

一  var、let和const区别

1.let和const不存在变量提升

console.log(c);   //undefined
var c='hello';

console.log(d);   //报错
let d='world';

2.let 和const 在同一个作用域下不能重复定义同一个名称

var d=1;
var d=100;
console.log(d);   //100

let f=1;
let f=100;   //若直接去掉let这个类型定义  ,直接f=100;是可以的,这个变量值可以改变  
console.log(f);   //报错

3.有着严格的作用域    var函数作用域  let和const块级作用域

function fun(){
   var n=10;
   if(true){
       var n=100;
    } 
    console.log(n);  
}
fun();  //100

function fun(){
   let m=10;
   if(true){
       let m=100;
    } 
    console.log(m);  //此时的两个m作用域范围不一致,不报错
}
fun();  //10

注明:const 声明一个只读的常量,一旦声明,常量的值就不能改变

const w=100;
w=200;  //报错
const r;  //报错,  一定初始化,不能只声明不赋值
const obj ={};
obj.name = 'anna';
console.log(obj)//不报错,因为数组和对象是引用对象,它定义的是内存的地址
const arr=[];
arr.push(1)
//不报错,因为数组和对象是引用对象,它定义的是内存的地址

二、箭头函数   (简化了函数的定义)

let f = v=>v;    //变量名 = 参数 => 返回值(函数体)   参数为空或个数为两个及两个以上则应()括住参数
var f=function(v){
  return v;  
}
let f2 = (n1,n2) => n1+n2;
  1. this是静态的,this始终指向函数声明所在作用域下的this的值
  2. 不能作为构造实例化对象
  3. 不能使用arguments变量
  4. 箭头函数的简写(省略小括号,当形参有且只有一个的时候;省略花括号,当代码体只有一句语句的时候)

三、数据结构    Set  Map

set 类似于数组  成员是唯一的

map 类似于对象 

const s=new Set();
s.add(1).add(2).add(3).add(2);
console.log(s) //Set(3) {1,2,3}
//面试常见题 数组去重处理
var arr2 = [2,2,3,1,4,4,2,2,6];
var arr3 = [...new Set(arr2)]; //把数组转成set类型,自动去重,之后再加[...]扩展运算符又转成数组类型

const m = new Map();
m.set('name','anna').set('age',18);
for(let [key,value] of m){
//可以用for循环取值
}
原文地址:https://www.cnblogs.com/cccaroline/p/13372170.html