# 深入理解ES6
# 《深入理解ES6》读书笔记
# 作用域
Javascript有函数作用域和全局作用域, 并没有块作用域. 关键字var
或者function
声明的变量会被提升, 即无论在作用域的哪里声明, 在解析时都会放到作用域的顶部.
关键词let
和const
可以创建块级作用域, 它们声明的变量不会提升,而且只可以在声明这些变量的代码块中使用。如此一来,JavaScript声明变量的语法与其他语言更相似了,同时也大幅降低了产生错误的几率,因为变量只会在需要它们的地方声明。与此同时,这一新特性还存在一个副作用,即不能在声明变量前访问它们,就算用typeof这样安全的操作符也不行。在声明前访问块级绑定会导致错误,因为变量还绑定在临时死区(TDZ)中。
let
和const
的行为很多时候与var
一致。然而,它们在循环中的行为却不一样。在for-in
和for-of
循环中,let
和const
都会每次选代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值,而非最后一次迭代后的值(像使用var那样)。let
在for
循环中同样如此,但在于for
循环中使用const
声明则可能引发错误。
实践建议
默认使用const
,只在确实需要改变变量的值时使用let
。这样就可以在某种程度上实现代码的不可变,从而防止某些错误的产生。
# 字符串与正则表达式
字符串匹配以前用indexOf(指定文本)
方法, 判断指定文本
在字符串的索引值, 不存在则返回-1
.
ES6新增下面方法:
includes(指定文本, [搜索位置索引])
方法: 判断字符串中是否含有指定文本
.startsWith(指定文本, [搜索位置索引])
方法: 判断字符串是否以指定文本
开始.endsWith(指定文本, [搜索位置索引])
方法: 判断字符串是否以指定文本
结尾.repeat(n)
方法: 将字符串重复n次并返回.