原文链接:阮一峰ECMAScript6入门
一、简介
关于babel
二、let与const
太长了。
简要说let。
let 与var相比,块级作用域,局部变量。不可提前写。
const 声明以后不能更改。
三、 变量的解构赋值
解构赋值不仅可以作用于数组,还可以对象,还可以字符串,还可以数值和布尔值。
使用方法:
1、交换数据位置
let x = 1;
let y = 2;
[x, y] = [y, x];
2、函数想返回多个数据,可采用数组加解构赋值
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
// 返回一个对象
function example() {
return {
foo: 1,
bar: 2
};
}
let { foo, bar } = example();
3、解决了传参
解构赋值可以方便地将一组参数与变量名对应起来。
// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);
// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});
4、提取json数据
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
// 42, "OK", [867, 5309]
5、函数参数的默认值
jQuery.ajax = function (url, {
async = true,
beforeSend = function () {},
cache = true,
complete = function () {},
crossDomain = false,
global = true,
// ... more config
} = {}) {
// ... do stuff
};
6、遍历Map结构
const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');
for (let [key, value] of map) {
console.log(key + " is " + value);
}
7、输入模块的指定方法
const { SourceMapConsumer, SourceNode } = require("source-map");
四、字符串的拓展
模板字符串
五、字符串的新增方法
5.1 检索字符串
传统上,JavaScript 只有indexOf
方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
这三个方法都支持第二个参数,表示开始搜索的位置。
5.2 repeat(3)
repeat
方法返回一个新字符串,表示将原字符串重复n
次。
5.3自动补全
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()
用于头部补全,padEnd()
用于尾部补全。
5.4 trim
字符串实例新增了trimStart()
和trimEnd()
这两个方法。它们的行为与trim()
一致,trimStart()
消除字符串头部的空格,trimEnd()
消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
5.5 matchAll
matchAll()方法返回一个正则表达式在当前字符串的所有匹配
6、正则的扩展
7、数值的扩展
7.1 八进制与二进制的表示法
Number('0b111') // 7 二进制
Number('0o10') // 8 八进制
7.2 Number.isFinite Number.isNaN
仅对数值有效
7.3 Number.parseInt Number.parseFloat
与全局相同,逐步减少全局放大,语言趋于模块化
7.4 Number.isInteger()
判断是不是整数,返回boolean
7.5 Number.EPSILON
极小的常量
7.6 Number.isSafeInteger()
Number.isSafeInteger()
则是用来判断一个整数是否落在这个范围之内
7.7
大数运算
数学方法,log 幂运算 等
8、函数的扩展
此处过长,暂略
9、数组的扩展
9.1 可扩展运算符
浅拷贝
可扩展运算符
const a1 = [{ foo: 1 }];
const a2 = [{ bar: 2 }];
const a3 = a1.concat(a2);
const a4 = [...a1, ...a2];
a3[0] === a1[0] // true
a4[0] === a1[0] // true
具有Iterator的对象都可以使用扩展运算符...
9.2 Array.from 把对象转换成数组
Array.from 可以把两类对象转换成真正的数组,一种是类数组对象arguments,一种是可遍历对象(Set,Map)
以往的方法是Array.prototype.slice.call(arguemnts)
返回数据的类型
function type(){
return Array.from(arguments,value=>typeof value)
}
type(null,[],NaN) // object object number
9.3 Array.of 把一组值转换成数组
对比Array()
与Array.of()
Array()
的参数为一个的时候,它其实指的是返回数组的长度,如下:
Array(3) // [,,]
Array(1,2) // [1,2]
Array.of
总是返回参数值组成的数组。如果没有参数,就返回一个空数组。
Array.of(3) // [3]
Array.of() // []
Array.of(undifined) // [undifined]
9.4 Ayyar.copyWithin()复制数组内部某数值覆盖数组内部的另一个数值
会改变原有数组
const arr= [1,2,3,4,5];
arr.copyWithin(0,3,4) // [4,2,3,4,5]
// 0 target: 把截取的数组放在哪里
// 3 start:截取数组的开始位置
// 4 end:截取数去的截止位置
9.5 Array.keys() Array.values() Array.entries() 新增的遍历方法
返回的是迭代器对象,所以可以使用for ...of
进行遍历
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
9.6 数组实例的includes()
返回boolean
9.7 Array.flat() 多维数组的拉平
想要拉平几维的数组,flat()
的参数就是几。全部拉平,使用flat(Infinity)
9.8 数组的空位
es5对空位的处理不统一。
es6会把空位转换为undefined
==> 总之,应该避免空位
12、Symbel
Symbol
,表示独一无二的值。
数据类型的分类方式,
一、基础数据类型。
二、值类型,引用数据类型
undefined
null
string
number
boolean
object
13、Set和Map数据结构
13.1 Set
类似于数组,但是每个元素都是唯一的
// 先去重,然后转换为数组
const tempModules = Array.from(new Set(this.modules));
new Set()
其本身就是一个构造函数,接受数组,对象等作为参数
作用:
- 数组的去重
- 字符串的去重
13.2 Set的实例属性
Set.prototype.constructor
(value)Set.proptotype.size()
// 实例的成员总数
add()
// adddelete()
// 返回一个布尔值,是不是返回成功clear()
// 清空所有成员,没有返回值has()
// 返回布尔值
Array.from()
把Set结构转换成数组
13.3 Set的遍历操作
keys()
、values()
、entries()
返回的都是迭代器对象。
let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
13.4 Map结构
Map 结构本质上是一种对象。
但是对象的键只能是字符串-值
,Map结构可以值-值
对应。
13.5 Map的参数
任何一个具有Iterator接口,且每个成员都有两个元素的数据结构
解释了二维数组可以作为Map的参数。