ECMA Script 6
块级作用域
var声明与块级提升
var 不管是在函数作用域还是全局作用域,都会被当成当前作用域顶部声明的变量,会在预编译阶段被编译器提升到作用域顶部
function fun(){
var val1;
if (){}
}
等同于
function fun(){
if (){var val1;}
}
块级声明
块级声明 可以看成 C中的局部作用域。
let 用于替代 var,来将变量限制在代码块内。
const所声明的常量变量跟let 一样,都是局部作用域内有效。
const与let都不会被提升,会严格按照变量声明顺序来进行。
重声明
都在同一作用域进行声明会出现重定义错误(var & let & const)
for(let i;;) 与 for(var i;;)的区别
区别在于循环结束后能否在循环外部继续访问。显而易见var 可以。
在没有let的情况下,以往都是使用IIFE (立即调用函数表达式)方法强制生成计数器副本。(funcs.push((function(value){} (i))))
let 循环,每次迭代循环都会创造一个新的变量i,并以之前的同名变量值来初始化。 等同于上面的IIFE。在for(obj in set)(可用const跟let)也是一样的。
字符串和正则表达式
Unicode与正则
正则表达式默认将字符串每一个字符按照16位编码单元处理。ES6定义了一个支持unicod的修饰符u。
eg:
let text = ‘吉’
console.log(/^.$/u.test(text)) => true,若去掉u则为false。
(但ES6可能没有在所有浏览器中都得到支持)
字符串变更
字串识别
includes(),包含指定文本,为true。
startsWith()开头匹配,为true。
endsWith()末尾匹配,为true。
这三个新方法需要传入字符串而非正则表达式。
传统的indexOf 与 lastIndexOf 都可以传入正则,并返回位置(若存在)。
REAPEAT方法
string.repeat(x),重复多少次此字符串。
正则表达式
let re1 = /ab/i, re2 = new RegExp(re1,’g’);
ES6中可行,re2将最后的参数i改为g。
RE.flags,可以获取RE的修饰符(最后一个/后面的字符)。re.source为前面的那些。
模板字面量
`context` => 所打即所得,包括空格&换行。
字符串占位符
let name = ‘Hello’, message = `Hello, ${name}`;
其输出为 Hello,Hello。