ES6吸收了面向对象语言的特点,优化了很多使用方式。
新特性如下。
let定义变量
- var是全局变量。
- let只在声明的代码块中有效。
- const类似于java final关键字,定义常量,不能修改。
字符串方法扩展
- includes():是否包含子字符串。
- startsWith():判断开始
- endsWith():判断结尾
解构表达式
//定义数组-实现解构表达式
let arr=[1,2,3];
//a,b,c将获取数组每个位置对应的值
let [a,b,c]=arr;
//也可以匹配1个参数
let [x]=arr;
console.log(a);
console.log(x);
解构对象
//定义对象-实现对象解构表达式
let person = {
name: "test",
age: 18,
language: ["java", "c++", "js"]
}
//解构赋值
let {name, age, language} = person;
console.log(name + ", " + age + ", " + language);
//解构对象,赋值给指定变量
let {name: n, age: a, language: l} = person;
console.log(n + ", " + a + ", " + l);
函数-设置默认值
//函数-设置参数默认值
function add(a, b = 1) {
return a + b;
}
//使用函数
console.log(add(10));
console.log(add(10, 5));
箭头函数
//函数优化-箭头函数
//普通写法
function sum(a, b) {
return a + b;
}
//优化写法-使用箭头
//箭头函数,函数体单行,无需使用{}
let sum2 = (a, b) => {
return a + b;
}
console.log(sum(10, 5));
console.log(sum2(10, 6));
对象函数简写
//对象函数简写
let person = {
name: "jack",
//普通写法
eat1: function (food) {
console.log(this.name + "喜欢吃" + food);
},
//箭头写法--这里不支持this
eat2: (food) => console.log(person.name + "喜欢吃" + food),
//简化写法
eat3(food) {
console.log(this.name + "喜欢吃" + food);
}
}
person.eat1("苹果");
person.eat2("苹果");
person.eat3("苹果");
map使用
//map的用法
//map接受一个函数,将原数组中的所有元素用这个函数处理后,放入新的数组返回
let arr=[1,2,3,4,5];
console.log(arr);
//对数组中的所有元素求平方
let newArr = arr.map(s=>Math.pow(s, 2));
//等同于
let newArr1 = arr.map(function (s) {
return Math.pow(s,2);
});
console.log(newArr);
reduce使用
//reduce的用法
//reduce接收一个函数(必须)和一个初始值(可选),第一个参数是上一次reduce的结果,第二个参数是要处理的下一个元素
let arr=[1,20,-5,3];
let reduce1 = arr.reduce((a, b)=>a+b);
console.log(reduce1);
let reduce2 = arr.reduce((a, b)=>{
return a+b;
}, 2);
console.log(reduce2);
reduce的调用逻辑:
扩展运算符
...:将一个数组转为用空格分隔的参数序列
let arr=[1,2,3,4,5];
console.log(arr);
console.log(...arr, ...arr);
结果如下:
Promise使用
//Promise是一个容器,保存着某个未来才会结束的事件(通常是一个异步操作)
let p = new Promise(function (resolve, reject) {
let num = Math.random();
if (num < 0.5) {
resolve(num);
} else {
reject(num);
}
});
//通过then和catch来处理不同的情形
p.then(value => {
console.log("success "+value);
}).catch(value=>{
console.log("error "+value);
})
支持Set和Map
//Set类似于数组,但不能存放重复元素
let s1=new Set([2,2,3,4,3]);
s1.add(6);
console.log(s1);
//Map
let m1=new Map([
["key1","value1"],
["key2","value2"]
]);
m1.set("key3", "value3");
console.log(m1);