1、声明变量用let,声明常量用const(定义唯一的值),都没有预解释,也不存在变量提升;
2、箭头函数:有如下两种写法
1)、表达式(函数体只有一行代码)
a)、let fn = p => p ; //一个参数
b)、let fn = (n,m) => n+m; //两个参数
c)、let fn = () => '我是没有参数的 '; //不带参数
2)、函数体(函数体有多行代码)
let fn = (n, m) => {
let total = n+m;
return total;
}
3、变量的解构赋值
1)数组
let [a, b, c] = [1, 2, 3];
console.log(a); //1
console.log(b); //2
console.log(c); //3
2)对象
let {a , b} = {a:'111',b:'222'};
console.log(a); //111
console.log(b); //222
4、扩展运算符:三个点(...)该运算符将一个数组,变为参数序列,所以不再需要ES5的apply方法。
function add(x, y) {
return x + y;
}
let numbers = [4, 38];
let result = add(...numbers);
console.log(result); // 42
5、模板字符串
let name = 'Kiki',
let age = 18;
//ES5写法
let str = name + '的年龄是' + age + ‘岁了!’;
//ES6写法(反引号:英文状态下,键盘第二行第一个字符)
let str = `${name}的年龄是${age}岁了!`;
6、Set和Map数据结构
1)Set 类似于数组,但是成员的值都是唯一的,不重复;本身也是一个构造函数,可以用new Set()来生成Set数据结构。
const set = new Set([1, 2, 3, 4, 4]);
console.log(...set); //1 2 3 4
2)Map js的对象(Object),本质上是键值对的集合。
let a = new Map();
let b = {};
a.set(b,'hello');
a.get(b); //hello
a.has(b); //true
a.delete(b);
a.has(b); //false
//Map 也可以接受一个数组作为参数
let person = new Map([
['name','kiki'],
['age',18]
]);
person.has('name'); //true
person.has('age'); //true
person.get('name'); //kiki
person.get('age'); //18
7、定义一个类及类的继承
1)、通过class创建类
2)、通过constructor创建构造函数
3)、函数名(){
//公有属性和方法
}
class Person{
constructor(name,age){
this.name = name;
this.age = age;
}
makePerson(){
return 'my name is ' + this.name + ', my age is ' + this.age
}
}
let person1 = new Person('kiki',18);
let p = person1.makePerson();
console.log(p);//my name is this.name , my age is this.age
4)、static 函数名(){} 静态的属性和方法,给类上添加的私有属性和方法
5)、class 子类 extend 父类 { //子类继承父类
constructor (name, age, color){
super(name, age); //必须写,调用父类的constructor(name, age)
this.color = color;
}
}
8、for-of循环:遍历所有数据结构的方法,可获取键值,而原有的for-in循环可获取键名
const arr = ['red', 'green', 'blue'];
for(let v of arr) {
console.log(v); // red green blue
}
for(let k in arr){
console.log(k); //0 1 2
}