1. 程式人生 > 實用技巧 >ES6新特性

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;

三、資料結構 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迴圈取值
}