ES6新特性
阿新 • • 發佈:2020-07-24
一 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迴圈取值
}