ES6的全称是:ECMAScript6.0,是 JavaScript 语言的下一代标准;它包含了一些很棒的新特性,能够更加方便的实现不少复杂的操做,提升开发人员的效率。目前流行的js框架都使用了大量的ES6语法。数组
var,let,const(常量)均可以用来定义变量,如下详细介绍let与const。
1,let变量
与var相似,用来定义变量。
区别以下:
(1)块级做用域(第三种做用域)。let所声明的变量,只在let命令所在的代码块内有效。 bash
(1)trim起做用时并不影响原字符串。
trim:去掉字符串左右的空格
trimLeft:去掉字符串左边的空格
trimRigth:去掉字符中右边的空格
(2)模板字符串
格式以下: 框架
1,方法的一些概念
(1)方法与函数区别与联系在于:方法也是函数,只不过写在对象里面的函数称为方法。
(2)方法分类可分红实例方法和类方法。函数
2,ES5数组新增方法
1)Array.isArray:判断一个数据是不是数组。
其格式:ui
Array.isArray(arr) 经过console.log()来打印出:true 或 flase。
复制代码
注意点:
(1)Array叫作构造器(本质是一个函数)。
(2)arguments(收集实参)不是一个真实的数组,长得虽然像数组,但叫伪数组或者类数组。
(3)rest参数是一个真实的数组。
2)forEach:对数组进行循环。(以前咱们也会用for对数组进行循环,用for会麻烦一些,由于它要用循环变量)
其格式:this
数组.forEach( function(item,index,arr){
// 第一个参数 item : 当前的数组元素。至关于arr[index];
// 第二个参数 index:数组元素的索引;
// 第三个参数 arr 当前的数组。
});
item,index,arr这叫形参,形参的命名是任意的,但通常咱们写的形参要见名知意,这并不影响结果。更重要的是形参的位置顺序。
复制代码
注意点:
(1)形参是一个回调函数;
(2)修改item的值并不影响原数组(这有个前提,这个item的值是基本数据类型,即若是它是引用数据类型,则这个修改会影响原数组)
(3)不能break;
(4)没有返回值;
(5)若是在回调函数中你不须要用到所有的三个参数,你按顺序去省略。
3)map(map是JS内置的方法): 逐一处理原数组元素,返回一个新数组。
其格式:spa
arr.map( function(item,index ,arr){
//item : 当前的数组元素。至关于arr[index]
//arr 当前的数组
//index:数组元素的索引;
return
} );
复制代码
模拟map:原来咱们使用的arr.map是js内置的方法,如若使用本身写的能够在Array构造器的原型上建立一个方法。
其格式:prototype
Array.prototype.MyMap = function(f){
var newArray = [];
//处理老数组中的每个元素,处理完后,把处理后的元素放到newArray
for(let i=0; i<this.length; i++){
newArray.push(f(this[i],i,this))
}
return newArray;
}
复制代码
易错点:map也存在着修改item的值并不影响原数组。在return语句时,通常是处理谁就返回谁。新数组由于被处理固然会发生变化,因此在打印时要注意是原数组,而非处理过的新数组
(前提条件:这个item的值是基本数据类型,即若是它是引用数据类型,则这个修改会影响原数组)
小问题:何时要用map?
答:在咱们须要对一个数组进行一些加工,但并不想修改原数组,只是但愿在原数组基础上,获得一个新数组。
4)filter: 逐一过滤原数组元素,留下符合条件的元素获得一个新数组。
其格式:3d
arr.filter( function(item,index ,arr){
// item : 当前的数组元素。至关于arr[index]
// index:数组元素的索引;
// arr 当前的数组
return 布尔值;//值为真,表示要留下这个数据。
} );
复制代码
5)reduce: (累加和的感受)不断地将前一项和后一项的值进行运算。
(具体规则是由回调函数决定的,每次的运算会涉及两项),把前一轮运算的结果做为当前运算的前一项。返回最后结果。
其格式:rest
格式1: 不带初始值:
数组.reduce(function(prev,next){return})
格式2: 带初始值:
数组.reduce(function(prev,next){...},初值)。
其中,function中第一个参数prev表示前一项,第二个参数next表示后一项。固然, 你能够改其它的变量名。reduce中的第二个参数表明初值,也就是说是加数的第一个值
复制代码
6)some: 只要数组中的某一个元素符合指定的条件,就会返回真,不然返回假。
其格式:
数组.some(function(value,index,arr){return;})
复制代码
7)every: 数组中的每个元素符合指定的条件,就会返回真,不然返回假。
其格式:
数组.every(function(value,index,arr){return;})
复制代码
3,ES6数组新增方法 1)Array.from:这个方法是Array构造器的静态方法,将把类数组对象转成真正的数组。
其格式:
格式1:Array.from(类数组对象);
格式2:Array.from(类数组对象,function(item,index){return;})
复制代码
2)Array.of:将一组值转换为数组。与Array.from功能类似,理解用来建立数组。
其格式:
Array.of(数值);
复制代码
3)find:用于找出第一个符合条件的数组元素。找不到则是undefined,注意:它是不会返回多个,只找一个,找到了就返回;若是你要把全部的知足条件的数组元素都找出来,你应该用filter()。
其格式:
arr.find(function(item,index){return 条件;})
复制代码
4)findIndex: 返回第一个符合条件的数组元素的索引。找不到则是-1。
其格式:
arr.findIndex(function(item,index){return 条件;})
复制代码
5)includes:判断一个元素是否在一个数组中,返回值是true或者false 其格式:
arr.includes(要判断的元素值)
复制代码
6)fill:给数组填充指定值。fill方法用于空数组的初始化很是方便。已有数据会被覆盖,fill方法还能够接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
其格式:
格式1:arr.fill(值)
格式2:arr.fill(值,起点,终点) 包括起点,不包括终点
复制代码
1,解构赋值的定义
ES6 容许按照必定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。其做用是对变量进行赋值。变量的值的来源是数组或者对象。解构赋值的规则就是根据必定的模式。
2,数组的解构赋值
数组的解构赋值:数组下标位置的对应关系。
(1)按下标一一对应地去赋值:由于两边赋值的数组中数据个数一致,就按照从前日后的顺序依照下标给其赋值
1,和属性相关的方法:
(1)Object.getOwnPropertyDescriptor() 获得某个对象中某个属性的特征
Object.defineProperty(对象名,"属性名",{
configurable: //是否能够删除。默认为true
writable: //是否能够修改属性的值。默认值为true
enumerable: //是否能够枚举,是否能够经过for in 循环来输出。默认为true
value: //值。默认是undefined
})
复制代码
1,参数默认值
在ES6出现以前,不能直接为函数的参数指定默认值,而ES6 容许为函数的参数设置默认值,即直接写在参数定义的后面。
let school = {name:'bjdx'};
let my = {age:{count:18},name:'yjb'};
//把原来的my放在新对象里,用一个新的age 把原来的age也拷贝一份
let newMy = {...my,age:{...my.age}}
let all = {...school,...newMy}
my.age.count = 100;
console.log(all);
复制代码
([param] [, param]) => {//函数体statements}
复制代码
箭头函数特色:
特色1:只有一个形参时,()可不写
特色2:若有多个形参,或者没有形参,则()不能少
特色3:只有一个带return语句 {} 和 return 均可以不写
特色4:只有一个不带return语句 {} 能够不写
特色5:若是返回对象,把{} 和 return 省掉的话,须要给这个对象加()
特色6:箭头函数不能当作构造函数,也就是说不能使用new命令
特色7:不能使用arguments对象,箭头函数中没有argumetns,可使用rest参数
特色8:箭头函数内部中不存在this,this会发生丢失(事件绑定与setinterval),可经过箭头函数解决
Class是ES5中构造器与原型的语法糖
(1)使用class直接来建立对象,能够代替以前书写的函数里的对象
在class建立的对象里面都是写的函数,也就是说这些函数都是方法,那么原型上的方法也就直接在这里书写啦!方法与方法之间不使用逗号,没有键值对。
class 父类{
constructor(name,age){
this.name = name;
this.age = age;
}
method(){ //对象中简写方法,省略了function。不要与箭头函数搞混了。
}
}
复制代码
(2)使用extends实现继承,在子类中的构造器constructor中,必需要显式调用父类的super方法,若是不调用,则this不可用
class 子类 extends 父类{
constructor(name,age){
super(name,age)
}
}
复制代码
实例指的是new上的东西,咱们能够经过new上一个对象来调用方法,还能够经过类来调用方法,若是使用类来调用方法的话,叫静态方法。
静态方法和静态属性就只能类来调用,实例(就是new上的那个对象)不能调用
class Animal{
static m = 1;//这里的m并非变量而只能称之为属性
//静态方法就仅仅是在其前面加上static,且不能使用实例调用
static eat(){
console.log("eat...")
}
}
Animal.eat()
复制代码