流年*https://i.cnblogs.com/files

关于es6 let var const 以及Symbol的总结

//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


posted on   流年*  阅读(118)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示