www123456

```javascript

//es6新增块级作用域。声明变量用关键字let const ,
// es5中只有函数作用域和全局作用域,声明变量用关键字var 
// let 和const 声明的变量不存在变量提升,var声明的变量存在变量提升。
//let 和const声明的变量只在块级作用域有效,既它所在当前的代码区块内。;let不能重复声明同一变量。
//let 声明的变量存在暂时性死区,即未声明就去使用会报出 引用(ReferenceError)错误。
//var 声明的全局变量 自动跨载到window成为其的属性。
console.log(y);//ReferenceError)错误
let x=2;

var tmp = new Date();
function f() {
   console.log(tmp);
   if (false) {
    var tmp = 'hello world';
  }
}
f();//变量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);//Symbol('F')
console.log( y);//Symbol('g')
//使用同一个Symbol可以使用Symbol的for方法
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
console.log(s1 === s2 );// true

 

 

 

 

```

分类:

技术点:

相关文章: