ES6语法,变量,数据类型
# 语法篇
- 标识符
- 标识符是指变量、函数、属性或函数参数的名称
- 标识符中字母可以是扩展ASCII和Unicode的字母字符
- 严格模式
- 在脚本或者函数开头写入 "use strict"; 采用这种语法是为了不破坏ES3语法
- "use strict"是个预处理命令,不同于JavaScript解析和执行模型,会对一些不规范的写法进行处理,并对不安全活动抛出错误
- 如给未声明变量赋值、定义名为eval和arguments的变量或对未声明变量调用delete在严格模式下都是不允许的
- 当采用无分号的代码风格时,要注意当一行代码以**( [ `**开头时,要在前面补一个分号以避免一些语法解析错误
# 变量篇
- const和let只能在ES6+使用
- let不能依赖条件声明模式,也就是说无法通过条件判断前面是否定义了同名变量,因为let是块作用域
- const声明变量的同时必须初始化
- let可用于for、for-in和for-of,使用let声明迭代变量时,JavaScript引擎会在后台为每个迭代循环声明一个新的迭代变量
- const可以用于for-in和for-of,但不能用于for,因为for循环每次执行完代码块后会进行+1操作,而const的值不可更改会报错
- 在let声明之前的执行瞬间被称为“暂时性死区”,在此阶段引用任何后面才声明的变量会抛出ReferenceError,严格来讲,let在JavaScript运行时中也会被提升,但由于“暂时性死区”的缘故,实际上不能在声明之前使用let变量
- 由于const声明按时变量的值是单一类型且不可修改,JavaScript运行时编译器可以将其所有实例都替换成实际的值,而不会通过查询表进行变量查找,谷歌的V8引擎就执行这种优化
# 数据类型篇
- ECMAScript一共有七种数据类型
- 简单数据类型:undefined、null、Boolean、Number、String和Symbol
- 复杂数据类型:Object
- typeof是一个操作数而不是函数,加不加参数都可以
- 可以通过typeof来区分对象和函数
- undefined是从null派生出来的,ES3之前不存在这个字面值,主要用来正式明确null和未初始化变量的区别
- 对未声明的变量调用typeof,返回的结果还是undefined
- undefined不需要显式赋值,但如果变量要保存对象,而当时又没有对象可保存,就要用null来填充该变量
温故而知新...