目录
ECMAScript 和 JavaScript 的关系
ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现,常场合,这两个词是可以互换的。
Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行。这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持
Let命令
只在声明所在的块级作用域内有效:ES6 新增了 let 命令,用来声明变量。它的用法类似于 var ,(var 函数级作用域)但是所声明的变量,只在 let 命令所在的代码块内有效(花括号级作用域)。
for 循环的计数器,就很合适使用 let 命令
let不存在变量提升:var 命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined 。
为了纠正这种现象, let 命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
let不允许重复声明:let 不允许在相同作用域内,重复声明同一个变量。
Const命令
只在声明所在的块级作用域内有效
const 声明一个只读的常量。一旦声明,常量的值就不能改变
const 声明的变量不得改变值,这意味着, const 一旦声明变量,就必须立即初始化,不能留到以后赋值
const 命令声明的常量也是不存在提升
const 声明的常量,也与 let 一样不可重复声明
对象解构赋值
对象的属性没有次序,变量必须与属性同名,才能取到正确的值
let {
age,name} = {
name:"iwen",age:20};
age // 20
如果要将一个已经声明的变量用于解构赋值,必须非常小心
let hello = "Hello";
let {
hello } = {
hello:"hello"}; // 报错
let hello = "Hello";
({
hello } = {
hello:"hello"}); // 正确
字符串新增方法
includes(), startsWith(), endsWith()
传统上,JavaScript 只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。
includes():返回布尔值,表示是否找到了参数字符串
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
这三个方法都支持第二个参数,表示开始搜索的位置
repeat()
repeat 方法返回一个新字符串,表示将原字符串重复 n 次。
padStart(),padEnd()
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。 padStart() 用于头部补全, padEnd() 用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
trimStart(),trimEnd()
ES2019对字符串实例新增了 trimStart() 和 trimEnd() 这两个方法。它们的行为与 trim() 一致, trimStart() 消除字符串头部的空格, trimEnd() 消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
at()
at() 方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。
如果参数位置超出了字符串范围, at() 返回 undefined
数组扩展_扩展运算符
扩展运算符(spread)是三个点( … )。将一个数组转为用逗号分隔的参数序列
console.log(...[1, 2, 3])
// 1 2 3
由于扩展运算符可以展开数组,所以不再需要 apply方法,将数组转为函数的参数了
展开数组:
ES5 的写法:Math.max.apply(null, [14, 3, 77])
ES6 的写法:Math.max(…[14, 3, 77])