第一部分:前端
1.初始化项目 npm init -y
2.安装ES6 环境
.babelrc 文件
babel-cli -g
babel-ecmascript2015 babel-cli --save-dev es6
#######################################################################################################web
第二部分:
变量的三种声明方式:
var -- 全局声明(容易产生污染)
let -- 局部声明(只存在于当前做用域)
const -- 变量声明以后,不容许随意更改(也可理解为常量)npm
#######################################################################################################编程
第三部分:
1.变量的解构赋值
<< ES6容许按照必定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在实际开发中能够大量减小咱们的代码量,而且让咱们的程序结构更清晰。json
<< 1.
let a = 0;
let b = 1; =>
let c = 2;
let [a,b,c] = [1,2,3] => var a = 1,b = 2, c = 3;
let [a,[b,c],d] = [1,[2,3],4] => var a = 1,b = 2,c =3 ,d = 4
注:若是等号两边形式不同,极可能得到undefined或者直接报错。后端
<< 2.数组的解构:
1>
let [foo=true] = [];
console.log(foo) // true
2>
let [a,b="zcc"] = ['hello']
console.log(a+b) // hellozcc
3>undefined至关于什么都没有,b解构成了null。
let [a,b="zcc"] = ['hello',undefined]
console.log(foo) // hellozcc
4>null 有值,但值为null,b取null。
let [a,b="zcc"] = ['hello', null]
console.log(foo) // hello null数组
<< 3.对象的解构
注意:对象的解构与数组有一个重要的不一样。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。浏览器
1.解构不只能够用于数组,还能够用于对象。
let foo;
({foo,bar} = {foo : 'zcc',bar : '000'});
console.log(foo+bar) // zcc000
<< 4.字符串的解构
字符串也能够解构,这是由于,此时字符串被转换成了一个相似数组的对象。
const [a,b,c,d]="JFAS";
console.log(a);
console.log(b);
console.log(c);
console.log(d);安全
#######################################################################################################
第三部分:扩展运算符和rest运算符
<< 1.对象扩展运算符(...):
(主要用于:当咱们声明一个变量方法,但不肯定参数个数的时候)
function argument(...arg){
console.log(arr[0])
console.log(arr[1])
console.log(arr[2])
console.log(arr[3])
}
argument(1,2,3)
1.eg: 这里的arr2 是对arr1 的映射
let arr1=['www','xiaoming','com'];
let arr2=arr1;
console.log(arr2); // www,xiaoming,com
arr2.push('shengHongYu');
console.log(arr1); // www,xiaoming,com,shengHongYu
2.eg: 这里的arr2 是对arr1 的扩展
let arr1=['www','xiaoming','com'];
let arr2=[...arr1];
console.log(arr2); // www,xiaoming,com
arr2.push('shengHongYu');
console.log(arr2); // www,xiaoming,com,shengHongYu
console.log(arr1); // www,xiaoming,com
<< 2.rest(剩余) 运算符
function argument(first,...arg){
console.log(arg.length)
for(let i = 0;i < arg.length; i++){
console.log(arg[i]) // 1,2,3,4,5,6
}
for(let val of arg){ // ES6 循环更高效率
console.log(val) // 1,2,3,4,5,6
}
}
argument(0,1,2,3,4,5,6) // 6
#######################################################################################################
第五部分:字符串模版
ES6对字符串新增的操做,最重要的就是字符串模版,字符串模版的出现让咱们不再用拼接变量了,并且支持在模板里有简单计算操做。
<< 1. 字符串拼接
let str1 = 'zcc2333';
let str2 = '字符串2'; // let str2 = `${str1}我是一个字符串`;
<< 2.查找字符串
let str = "zcc2333";
let str2 = "zcc2333我是一个字符串";
console.log(str2.indexOf(str1)); //返回索引,没有返回-1;
console.log(str2.includes(str1)); //返回 true 不存在返回false
console.log(str2.startsWith(str1)) //返回 查看开头是否有 true/false
console.log(str2.endsWith(str1)) //返回 查看结尾是否有 true/false
<< 3.字符串复制
document.write('zcc2333|'.repeat(10)) // 第一个参数是要复制的字符串,repeat(num) 要复制的个数
#######################################################################################################
第六部分:ES6数字操做
<< 1.二进制和八进制
1>. 二进制
二进制声明: 二进制的英文单词是Binary,二进制的开始是0(零),而后第二个位置是b(注意这里大小写均可以实现),而后跟上二进制的值就能够了。
let binary = 0B100110;
console.log(binary) // 21
2>. 八进制
八进制声明:八进制的英文单词是Octal,也是以0(零)开始的,而后第二个位置是O(欧),而后跟上八进制的值就能够了。
let octonary = 0O666;
console.log(octonary) // 438
<< 2.数字判断和转换
1>. 数字验证Number.isFinite( xx )
注意:可使用Number.isFinite( )来进行数字验证,只要是数字,不管是浮点型仍是整形都会返回true,其余时候会返回false。
let a = 11/4;
console.log(Number.isFinite(a));//true
console.log(Number.isFinite('xiaoming'));//false
console.log(Number.isFinite(NaN));//false
console.log(Number.isFinite(undefined));//false
3>. NaN验证
NaN是特殊的非数字,可使用Number.isNaN()来进行验证。下边的代码控制台返回了true。
console.log(Number.isNaN(NaN)); // true
4>. 判断是否为整数Number.isInteger(xx)
let a=123.1;
console.log(Number.isInteger(a)); //false
5>. 整数转换Number.parseInt(xxx)和浮点型转换Number.parseFloat(xxx)
let a='9.18';
console.log(Number.parseInt(a)); // 9
console.log(Number.parseFloat(a)); // 9.18
<< 3.整数取值范围操做
注意:整数的操做是有一个取值范围的,它的取值范围就是2的53次方。咱们先用程序来看一下这个数字是什么。
let a = Math.pow(2,53)-1;
console.log(a); //9007199254740991
1>. 最大安全整数
console.log(Aumber.MAX_SAFE_INTEGER(a))
2>. 最小安全整数
console.log(Number.MIN_SAFE_INTEGER(a))
3>. 安全整数判断
let a = Math.pow(2,53) - 1;
console.log(Nuber.isSafeInteger(a)) // fasle
#######################################################################################################
第七部分:ES6中新增的数组知识(1)
<< 1. json 转换数组方法 Array.from()
let json1 = {
"0": "小明",
"1": 18,
'2': "china",
length: 3
}
这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要是这种特殊的json格式均可以轻松使用ES6的语法转变成数组。在ES6中绝大部分的Array操做都存在于Array对象里。咱们就用Array.from(xxx)来进行转换。而后再控制台输出一下:
let arr = Array.from(json)
console.log(arr) // arr = ["小明",18,"china"]
<< 2.Array.of()
它负责把一堆文本或者变量转换成数组。在开发中咱们常常拿到了一个相似数组的字符串,须要使用eval来进行转换,咱们知道 eval 转换的效率是很低的,它会拖慢咱们的程序。这时候咱们就可使用Array.of方法。咱们看下边的代码把一堆数字转换成数组并打印在控制台上:
数字转数组:
let arr =Array.of(3,4,5,6);
console.log(arr); // [3,4,5,6]
字符串转数组:
let arr =Array.of('小明','18','china');
console.log(arr); // ['小明','18','china']
<< 3.find( )实例方法:
所谓的实例方法就是并非以Array对象开始的,而是必须有一个已经存在的数组,而后使用的方法,这就是实例方法。
这里的find方法是从数组中查找。在find方法中咱们须要传入一个匿名函数,函数须要传入三个参数:
1> value: 表示当前查找的值。
2> index: 表示当前查找的数组索引。
3> arr: 表示当前数组。
#####################################################################################
第八部分:ES6中新增的数组知识(2)
<< 1.fill( )实例方法:
fill()也是一个实例方法,它的做用是把数组进行填充,它接收三个参数,第一个参数是填充的变量,第二个是开始填充的位置,第三个是填充到的位置。
let arr=[0,1,2,3,4,5,6,7,8,9];
arr.fill('xiaoming',2,5);
console.log(arr);
<< 2.for...of循环:
这种形式比ES5的for循环要简单并且高效。先来看一个最简单的for…of循环。
let arr = ['小明','18','china.'];
1>. 循环数组中的元素
for(let item of arr){
console.log(item)
}
// '小明' '18' 'china.'
2>. 循环数组中的下标 arr.keys() -> es6 中的实例方法
for(let item of arr.keys()){
console.log(item)
}
// 0 1 2
2>. 同时输出数组的内容和索引
for( let [index,val] of arr.entries){
console.log(index+':'+val)
}
// 0 : 小明 1 : 18 2 : china
<< 3.entries( )实例方法:
entries()实例方式生成的是Iterator形式的数组,那这种形式的好处就是可让咱们在须要时用next()手动跳转到下一个值。咱们来看下面的代码:
let arr=['小明','18','china']
let list=arr.entries(); // 将数组生成条目行的形式
console.log(list.next().value); // [0, "小明"]
console.log(list.next().value); // [1, "18"]
console.log(list.next().value); // [2, "china"]
#####################################################################################
第九部分:ES6中的箭头函数和扩展
回顾一下ES5中的函数写法。写一个函数,进行一个加法计算:
function add(a,b){
return a+b
}
add(2); // undefined
add(2,3); // 2+3 =5
<< 1.默认值
在ES6中给咱们增长了默认值的操做,咱们修改上边的代码,能够看到如今只须要传递一个参数也是能够正常运行的。
function add(a,b=1){ // b 的默认值为 1
return a+b
}
add(2); // 2+1 = 3
add(2,3); // 2+3 =5
<< 2.主动抛出错误
在使用Vue的框架中,能够常常看到框架主动抛出一些错误,好比v-for必须有:key值。那尤大神是如何作到的那?
其实很简单,ES6中咱们直接用throw new Error( xxxx ),就能够抛出错误。
function add(a,b=1){
if(a == 0){
throw new Error('This is error')
}
return a+b;
}
console.log(add(0));
<< 3.函数中的严谨模式
在ES5中就常用严谨模式来进行编程,可是必须写在代码最上边,至关于全局使用。在ES6中咱们能够写在函数体中,至关于针对函数来使用。
function add(a,b=1){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add(1)); // 浏览器报错,严谨模式不容许使用默认值
<< 3.得到须要传递的参数个数
使用别人的框架时,不知作别人的函数须要传递几个参数怎么办?ES6为咱们提供了获得参数的方法(xxx.length).咱们用上边的代码看一下须要传递的参数个数。
function add(a,b){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add.length); // 2
当其中的a 或 b 含有默认值时 这时候 add.length 为1.
当其中的a 和 b 都有默认值时 这时候 add.length 为0.
function add(a,b=1){
'use strict'
if(a == 0){
throw new Error('This is error');
}
return a+b;
}
console.log(add.length); // 2
<< 5.箭头函数
注:箭头函数不容许使用 new 构造函数!
add(a,b=1) => a+b;
console.log(add(1,3)) // 4
add(a,b=1) => {
return a+b
}
console.log(add(3)) // 4
注:箭头函数不容许使用 new 构造函数!!!
第十部分:ES6中的函数和数组补漏
<< 1.对象的函数解构
咱们在先后端分离时,后端常常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据看成参数,传递到函数内部进行处理。ES6就为咱们提供了这样的解构赋值。
let json = {
a:'小明',
b:'china'
}
function fn({a,b='xiaoming'}){
console.log(a,b);
}
fn(json); // 小明 china
let arr = ['小明','18','china'];
function fun(a,b,c){
console.log(a,b,c);
}
fun(...arr); // '小明' '18' 'china'
<< 2.in的用法
in是用来判断对象或者数组中是否存在某个值的。
1>. 对象判断
let obj={
a:'xiaoming',
b:'小明'
}
console.log('a' in obj); //true
2>. 数组判断 (数组空位的判断)
先来看一下ES5判断的弊端,之前会使用length属性进行判断,为0表示没有数组元素。可是这并不许确,或者说真实开发中有弊端。
let arr=[,,,,,];
console.log(arr.length); // 5
上边的代码输出了5,可是数组中其实全是空值,这就是一个坑啊。那用ES6的in就能够解决这个问题。
let arr=[,,,,,];
console.log(0 in arr); //false
let arr1=['xiaoming','小明'];
console.log(0 in arr1); // true
注意:这里的0指的是数组下标位置是否为空。
<< 3.数组的遍历方法
1>. forEach
let arr=['小明','18','china'];
arr.forEach((val,index)=>console.log(index,val));
forEach循环的特色是会自动省略为空的数组元素,至关于直接给咱们筛空了。可是有时候咱们须要这样的空数组,那就会很是尴尬了。
2>. filter
let arr=['小明','18','china'];
arr.filter(x=>console.log(x));
// 小明
// 18
// china
// []
3>. some
let arr=['小明','18','china'];
arr.some(x=>console.log(x));
// 小明
// 18
// china
// false
4>. map
let arr=['小明','18','china'];
console.log(arr.map(x=>'web'));
// ["web", "web", "web"]
// undefined
<< 4.数组转换字符串
1>. join()方法
join()方法就是在数组元素中间,加了一些间隔,开发中颇有用处。
let arr=['小明','18','china'];
console.log(arr.join('|'));
// '小明|18|china'
2>. toString()方法
// 转换时是用逗号隔开了。
let arr=['小明','22','china']; console.log(arr.toString());第十一部分:ES6中对象 << 1.