let和const
使用let ,那么设置循环的是一个作用域,循环体内部是单独的作用域
- 变量提升
- 暂时性死区:在代码块内,使用let声明该变量之前,变量不可用
- 暂时死去使得typeof不再安全,如果一个变量没有声明,返回undefined
let x=x暂时死去
为什么需要块及作用域
块及作用域和函数声明-待阅读
const表示指的内存地址保存的数据不可以改动
es5声明的方法,var和function,es6新加let
每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突
对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型
Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"
如果 Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值
class MyClass {
[Symbol.hasInstance](foo) {
return foo instanceof Array;
}
}
[1, 2, 3] instanceof new MyClass() // true