關於es6 let var const 以及Symbol的總結

流年*發表於2021-01-12
//es6新增塊級作用域。宣告變數用關鍵字let const ,
// es5中只有函式作用域和全域性作用域,宣告變數用關鍵字var 
// let 和const 宣告的變數不存在變數提升,var宣告的變數存在變數提升。
//let 和const宣告的變數只在塊級作用域有效,既它所在當前的程式碼區塊內。;let不能重複宣告同一變數。
//let 宣告的變數存在暫時性死區,即未宣告就去使用會報出 引用(ReferenceError)錯誤。
//var 宣告的全域性變數 自動跨載到window成為其的屬性。
console.log(x);//ReferenceError)錯誤
let x=2;

var tmp = new Date();
function f() {
   console.log(tmp);
   if (false) {
    var tmp = 'hello world';
  }
}
f(); //undefined    //變數tmp提升 內層tmp變數覆蓋外層tmp變數.
var x=2;
var x=3;
console.log(x);//3
let y=4;
let y=5
console.log(y);//引用(ReferenceError)錯誤。


//es5中 有6種資料型別  undefined、null、布林值(Boolean)、字串(String)、數值(Number)、物件(Object)
//es6 引入第七種Symbol資料型別,其宣告的值是獨一無二的;
let x=Symbol()
console.log(typeof x);//Symbol
//es5中物件的屬性名只能是字串,現在可以是Symbol,如果屬性名重複,後面的屬性會覆蓋前面的屬性。可以使用Symbol解決
let y={name:"yz",[x]:"yx"}
let z={name:"yx",name:"yz"} 
console.log(z);//{name:"yz"}
console.log(y);//{name:"yz",[Symbol()]:"yx"}
//Symbol 接收一個引數便於區分
let m=Symbol('F')
let y=Symbol('g')
console.log( m);
console.log( y);
//使用同一個Symbol可以使用Symbol的for方法
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
console.log(s1 === s2 );// true


相關文章