let const 作用域
作用域概念
+ 全局作用域
+ 函数作用域
+ 块级作用域
如何使用let和const
-
使用let
- 形成块级作用域
- es6下强制开启严格模式,而在es5下,需要"use strice"才能开启严格模式;
-
使用const
- 声明的常量不能修改;但是对象可以修改,因为对象是对地址的引用,我们可以在内存空间中更改对象
function last(){
const k ={
a:1
}
k.a = 123;
console.log(k) //123
}
- 声明的时候必须赋值
- const也有块级作用域概念
Symbol
- Symbol概念:用Symbol申明的变量将是独一无二的值
- Symbol的作用: 避免属性名相同的问题
- 注意:对象中,有用到symbol做key值的话,是取不到的;
即let...of只能拿到非Symbol对象的值;
- 注意:对象中,有用到symbol做key值的话,是取不到的;
let a1=Symbol.for('abc');
let obj={
[a1]:'123',
'abc':345,
'c':456
};
console.log(obj) //{abc: 345, c: 456, Symbol(abc): "123"}
for(let [key,value] of Object.entries(obj) ){
console.log('let of',key,value) //let of abc 345 let of c 456
}
- 解决办法:通过以下代码可以取到Symbol的值;Object.getOwnPropertySymbols可以拿到Symbol对象的值;
Object.getOwnPropertySymbols(obj).forEach(function (item) {
console.log(obj[item]) //123
})
- 返回了所有key和value值;通过es6最增的Reflect.ownKeys(obj)
Reflect.ownKeys(obj).forEach(function (item) {
console.log(item,obj[item]) //abc 345,c 456, Symbol(abc) "123"
});