## 数据类型 - 原始类型 - `Boolean` - `String` - `Number` 双精度 64 位二进制格式的值 `$ -(2^{63} -1) $` 到 `$ 2^{63}-1 $` - NaN:无法表示的数值,NaN !== NaN - +/-Infinity: 无穷大/无穷小 - `nndefiend` - `null` - `Symbol` - `Object` ## var let var 存在申明提升,即进入一个作用域的时候,会先将变量进行赋初值为undefined操作,然后执行后面的代码。这一就会导致在定义一个变量前就可以访问到,而且不报错。 虽然let申明的变量不会存在这一的,定义变量前访问这个变量会出错,但是实际上也是在进入在作用域时提起申明let变量的,只是并没有赋初值为undefined,而是放在了临时性死区,无法被访问。 > https://dmitripavlutin.com/variables-lifecycle-and-why-let-is-not-hoisted/