什么是ES6
ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。
ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,
ES6新增特性
- var let const:
let和var的区别:
(1)看是否有变量提升
var有变量提升,let没有
(2)看是否有块级作用域
(3)看是否能够重复定义
let和const解决了以上问题如下:
不可以重复声明变量
let site = 'itLike';
let site = 'itLike';
console.log(site);
不存在变量提升
console.log(site);
let site = 'itLike';
可以定义常量
const E = 2.718;
E = 2.71;
console.log(E);
// 引用类型
const LK = {
name:'itLike',
intro: '喜欢IT, 就上撩课(itLike.com)'
};
LK.name = '撩课';
console.log(LK);
块级作用域
如果用var定义变量,变量是通过函数或者闭包拥有作用域;但,现在用let定义变量,不仅仅可以通过函数/闭包隔离,还可以通过块级作用域隔离。
块级作用域用一组大括号定义一个块,使用 let 定义的变量在大括号的外部是访问不到的,此外,let声明的变量不会污染全局作用域。
{let site = 'itLike';}
console.log(site);
if(1){ let str = '04'; }
console.log(str);
- 解构赋值
解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。
- 构的源,解构赋值表达式的右边部分。
- 解构的目标,解构赋值表达式的左边部分。
变量解构赋值(数组解构)
let nameArr = ['撩课', '小撩', '小煤球'];
let name1 = nameArr[0];
let name2 = nameArr[1];
let name3 = nameArr[2];
// 解构写法
let [name1, name2, name3] = nameArr;
console.log(name1, name2, name3);
变量解构赋值(对象解构)
// 写法1
let {name, age, sex}
= {name: '小煤球', age: 1, sex: '公'};
// 结果: 小煤球 1 公
console.log(name, age, sex);
// 写法2: 解构重命名
let {name: lkName, age: lkAge, sex: lkSex}
= {name: '小煤球', age: 1, sex: '公'};
// 结果: 小煤球 1 公
console.log(lkName, lkAge, lkSex);
// 写法3: 可以设置默认值
let {name, age, sex = '公'}
= {name: '小煤球', age: 1};
console.log(sex); // 公
// 写法4:省略解构
let [, , sex] = ['小煤球', 1, '公 '];
console.log(sex);
3.延展操作符
延展数组
let arr1 = [ 'a', 'b', 'c'];
let arr2 = [1, 2, 3];
let result = [...arr1, ...arr2];
console.log(result);
// [ "a", "b", "c", 1, 2, 3 ]
延展对象
let smallDog = {name:'小煤球', age: 1};
let bigDog = {name: 'Python', age: 2};
let dog = {...smallDog, ...bigDog};
console.log(dog);
// {name: "Python", age: 2}
注意: 如果对象中的属性一致, 会被覆盖
开发应用场景
function getMinValue() {
console.log(Math.min(...arguments));
}
getMinValue(1, -99, 22, 10, 9); // -99
4.箭头函数
格式:(参数1,参数2,…参数n)=>{ //代码块 }
1.this指向不同:箭头函数没有自己的this,它的this指父级函数所在的this
2.箭头函数不能实例化:new ()=>{ } 报错
3.箭头函数没有arguments
箭头函数提供了一种更加简洁的函数书写方式。基本语法是:
> 参数 => 函数体
function 函数名称(参数列表){
函数执行体
}
this指针的固化
var 函数名称 = (参数列表)=>{
函数执行体
}
基本用法:
var f = v => v;
//等价于
var f = function(a){
return a;
}
f(1); //1
5、模板字符串
模板字符串用反引号()包含,变量用${}括起来; 在开发中使用是非常灵活的。
let name = '小煤球';
let sex = '公';
let result = `我叫 ${name} , 我是 ${sex} 的`;
console.log(result);
6.set 和 map
set:数组的升级版本
add:添加唯一值
delete:删除某一个值
clear:删除所有
forEach:遍历set对象
注:可以用set来实现数组去重,
var arr=[3, 4, 5, 5, 2, 2, 4, 6, 562, 2]
例如:[...new Set(arr)]
map:对象的升级版本
let m1=new Map() 创建map对象
m1.set(key,value)设置key的值
m1.get(key)获取key对应的值
m1.keys()获取key所组成的对象
m1.values()获取value组成的对象
m1.entries()获取key,values组成的对象
m1.forEach()遍历map对象
7.class类
第一点:ES5中是用函数来模拟一个类,ES6中class来实现一个类
类与对象的关系:一个类可以创建出多个对象(对象也称为实例)
class基本语法
JavaScript 语言中,生成实例对象的传统方法是通过构造函数和原型的组合模式.ES6 提供了更接近传统语言(java)的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。
class point{
constructor(x,y){
this.x=x;
this.y=y;
}
play(){
console.log("我会玩");
}
}