一:Map
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键” 的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。Map 的属 性和方法:
1) size 返回 Map 的元素个数
2) set 增加一个新元素,返回当前 Map
3) get 返回键名对象的键值
4) has 检测 Map 中是否包含某个元素,返回 boolean 值
5) clear 清空集合,返回 undefined
//声明 Map
let m = new Map();
//添加元素
m.set('name','university');
m.set('change', function(){
console.log("我们可以改变你!!");
});
let key = {
school : 'UNIVERSITY'
};
m.set(key, ['北京','上海','深圳']);
//size
// console.log(m.size);
//删除
// m.delete('name');
//获取
// console.log(m.get('change'));
// console.log(m.get(key));
//清空
// m.clear();
//遍历
for(let v of m){
console.log(v);
}
console.log(m);
二:Class 类
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对 象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是 一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象 原型的写法更加清晰、更像面向对象编程的语法而已。 知识点:
1) class 声明类
2) constructor 定义构造函数初始化
3) extends 继承父类
4) super 调用父级构造方法
5) static 定义静态方法和属性
6) 父类方法可以重写
//西游记
function xiyouji(name, age){
this.name = name;
this.age = age;
}
//添加方法
xiyouji.prototype.call = function(){
console.log("我可以上天!!");
}
//实例化对象
let sunwukong = new xiyouji('孙悟空', 10000);
sunwukong.call();
console.log(sunwukong);
//class
class renwu{
//构造方法 名字不能修改
constructor(name, age){
this.name = name;
this.age = age;
}
//方法必须使用该语法, 不能使用 ES5 的对象完整形式
call(){
console.log("我可以下地府!!");
}
}
let zhubajie = new renwu("猪八戒", 8000);
console.log(zhubajie);
Class的get和set属性
// get 和 set
class xiyouji{
get name(){
console.log("人物姓名属性被读取了");
return '孙悟空';
}
set name(newVal){
console.log('人物姓名属性被修改了');
}
}
//实例化对象
let s = new xiyouji();
// console.log(s.name);
s.name = 'zhubajie';
三:数值扩展
(1)进制
二进制0b
八进制0o
十六进制0x
(2)方法
Number.isFinite | 检测一个数值是否为有限数 |
Number.isNaN | 检测一个数值是否为 NaN |
Number.isInteger | 判断一个数是否为整数 |
Math.trunc | 用于去除一个数的小数部分,返回整数部分 |
Math.sign | 判断一个数到底为正数 负数 还是零 |
Number.parseInt Number.parseFloat | 字符串转整数 |
四:对象扩展
ES6 新增了一些 Object 对象的方法
1) Object.is 比较两个值是否严格相等,与『===』行为基本一致(+0 与 NaN)
Object.is 判断两个值是否完全相等
console.log(Object.is(120, 120));
console.log(Object.is(NaN, NaN));
console.log(NaN === NaN);
2) Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象
Object.assign 对象的合并
const config1 = {
host: 'localhost',
port: 3306,
name: 'root',
pass: 'root',
test: 'test'
};
const config2 = {
host: 'http://www.baidu.com',
port: 33060,
name: 'www.baidu.com',
pass: 'iloveyou',
test2: 'test2'
}
console.log(Object.assign(config1, config2));
3) __proto__、setPrototypeOf、 setPrototypeOf 可以直接设置对象的原型
Object.setPrototypeOf 设置原型对象 Object.getPrototypeof
const school = {
name: '大学'
}
const cities = {
xiaoqu: ['北京','上海','深圳']
}
Object.setPrototypeOf(school, cities);
console.log(Object.getPrototypeOf(school));
console.log(school);
五:模块化(模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。)
(1)优点
1) 防止命名冲突
2) 代码复用
3) 高维护性
(2)ES6 模块化语法
模块功能主要由两个命令构成:export 和 import。
1) export 命令用于规定模块的对外接口
2)import 命令用于输入其他模块提供的功能
1. 通用的导入方式
//引入 m1.js 模块内容
import * as m1 from "路径名1";
//引入 m2.js 模块内容
import * as m2 from "路径名2";
//引入 m3.js
import * as m3 from "路径名3";
2. 解构赋值形式
import {school, teach} from "路径名1";
import {school as university, findJob} from "路径名2";
import {default as m3} from "路径名3";
3. 简便形式 针对默认暴露
import m3 from "路径名";
console.log(m3);