重学JavaWeb第三天(十)

简介: 重学JavaWeb第三天(十)

7.1.14、Map

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键” 的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。Map 的属性和方法:

  • size:返回 Map 的元素个数
  • set():增加一个新元素,返回当前 Map
  • get():返回键名对象的键值
  • has():检测 Map 中是否包含某个元素,返回 boolean 值
  • clear():清空集合,返回 undefined
//创建一个空 map
let m = new Map();
//创建一个非空 map
let m2 = new Map([
    ["name", "张三"],
    ["gender", "女"]
]);
//属性和方法
//获取映射元素的个数
console.log(m2.size);
//添加映射值
console.log(m2.set("age", 6));
//获取映射值
console.log(m2.get("age"));
//检测是否有该映射
console.log(m2.has("age"));
//清除
console.log(m2.clear());

3bd894dd1c913370e03dcdddbdda27c2.png

7.1.15、class 类

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是 一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已,它的一些如下:


class:声明类

constructor:定义构造函数初始化

extends:继承父类

super:调用父级构造方法

static:定义静态方法和属性

//父类
class Phone {
    //构造方法
    constructor(brand, color, price) {
        this.brand = brand;
        this.color = color;
        this.price = price;
    }
    //对象方法
    call() {
        console.log("我可以打电话!!!")
    }
}
//子类
class SmartPhone extends Phone {
    constructor(brand, color, price, screen, pixel) {
        super(brand, color, price);
        this.screen = screen;
        this.pixel = pixel;
    }
    //子类方法
    photo() {
        console.log("我可以拍照!!");
    }
    playGame() {
        console.log("我可以玩游戏!!");
    }
    //方法重写
    call() {
        console.log("我可以进行视频通话!!");
    }
    //静态方法
    static run() {
        console.log("我可以运行程序")
    }
    static connect() {
        console.log("我可以建立连接")
    }
}
//实例化对象
const Nokia = new Phone("诺基亚", "灰色", 230);
const iPhone6s = new SmartPhone("苹果", "白色", 6088, "4.7inch", "500w");
//调用子类方法
iPhone6s.playGame();
//调用重写方法
iPhone6s.call();
//调用静态方法
SmartPhone.run();

53f864a51661be036168ee7027990906.png

7.1.16、数值扩展

7.1.16.1、二进制和八进制

ES6 新增了二进制和八进制的表示方法

let b = 0b1010//二进制
let o = 0o777;//八进制
let d = 100;//十进制
let x = 0xff;//十六进制
console.log(b);
console.log(o);
console.log(d);
console.log(x);

e49a333c054fcdfa036b287ca2b7fe42.png

7.1.16.2、Number.EPSILON

Number.EPSILON:它是 JavaScript 表示的最小精度,EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16

function equal(a, b) {
    if (Math.abs(a - b) < Number.EPSILON) {
        return true;
    } else {
        return false;
    }
}
console.log(0.1 + 0.2 === 0.3);
console.log(equal(0.1 + 0.2, 0.3));

f22ce95747948589a2f9edc35f6e2aa7.png

7.1.16.3、Number.isFinite

Number.isFinite:检测一个数值是否为有限数

console.log(Number.isFinite(100));
console.log(Number.isFinite(100 / 0));
console.log(Number.isFinite(Infinity));
console.log(Number.isFinite(-Infinity));

7.1.16.4、Number.isNaN

Number.isNaN:检测一个数值是否为 NaN

console.log(Number.isNaN(123));
• 1

7.1.16.5、Number.parseInt

Number.parseInt:将一个字符串转换为整数

console.log(Number.parseInt("123abc"));
• 1

7.1.16.6、Number.parseFloat

Number.parseFloat:将一个字符串转换为浮点数

console.log(Number.parseFloat("3.1415926神奇"));
• 1

7.1.16.7、Number.isInteger

Number.isInteger:判断一个数是否为整数

console.log(Number.isInteger(5));
console.log(Number.isInteger(2.5));
• 1
• 2

7.1.16.8、Math.trunc

Math.trunc:将数字的小数部分抹掉

console.log(Math.trunc(3.5));
• 1
• 2

7.1.16.9、Math.sign

Math.sign:判断一个数到底为正数、负数、还是零

console.log(Math.sign(100));
console.log(Math.sign(0));
console.log(Math.sign(-20000);

7.1.17、对象扩展

ES6 新增了一些 Object 对象的方法,例如:

Object.is:比较两个值是否严格相等,与『===』行为基本一致(+0 与 NaN)

Object.assign:对象的合并,将源对象的所有可枚举属性,复制到目标对象

proto、setPrototypeOf、 setPrototypeOf可以直接设置对象的原型

7.1.17.1、Object.is

Object.is:判断两个值是否完全相等

console.log(Object.is(120, 120));// ===
console.log(Object.is(NaN, NaN));// ===
console.log(NaN === NaN);// ===

7.1.17.2、Object.assign

Object.assign:对象的合并,后边的对象会把前边对象的相同属性和方法覆盖,没有的属性和方法会合并

const config1 = {
    host: "localhost",
    port: 3306,
    name: "zhangsan",
    pass: "root",
    test1: "test1"
};
const config2 = {
    host: "127.0.0.1",
    port: 3309,
    name: "lisi",
    pass: "root",
    test2: "test2"
}
console.log(Object.assign(config1, config2));

73623a649a45c3d32daa81ad1d1f76c7.png

7.1.17.3、设置原型对象

  • Object.setPrototypeOf:设置原型对象
  • Object.getPrototypeof:获取原型对象
const school = {
    name: "MySchool"
};
const cities = {
    xiaoqu: ["北京", "上海", "深圳"]
};
Object.setPrototypeOf(school, cities);
console.log(Object.getPrototypeOf(school));
console.log(school);

aa9fc9736f3f2a54e015f1555ca1213b.png

7.1.18、模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。

7.1.18.1、模块化的好处

  • 防止命名冲突
  • 代码复用
  • 高维护性

7.1.18.2、模块化的产品

CommonJS => NodeJS、Browserify

AMD => requireJS

CMD => seaJS

7.1.18.3、模块化的语法

模块功能主要由两个命令构成:export 和 import。

  • export 命令用于规定模块的对外接口
  • import 命令用于输入其它模块提供的功能

7.1.18.4、模块化的暴露

m1.js

//方式一:分别暴露
export let school = "华北理工大学";
export function study() {
    console.log("我们要学习!");
}

m2.js

//方式二:统一暴露
let school = "华北理工大学";
function findJob() {
    console.log("我们要找工作!");
}
export {school, findJob};

m3.js

//方式三:默认暴露
export default {
    school: "华北理工大学",
    change: function () {
        console.log("我们要改变自己!");
    }
}

7.1.18.5、模块化的导入

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<!-- 在这里写JavaScript代码,因为JavaScript是由上到下执行的 -->
<script type="module">
    // 引入 m1.js 模块内容
    import * as m1 from "./m1.js";
    // 引入 m2.js 模块内容
    import * as m2 from "./m2.js";
    // 引入 m3.js 模块内容
    import * as m3 from "./m3.js";
    m1.study();
    m2.findJob();
    m3.default.change();
</script>
</body>
</html>

3cc832d8a66e80586fc35ccd98596cd5.png


7.1.18.6、解构赋值形式

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<!-- 在这里写JavaScript代码,因为JavaScript是由上到下执行的 -->
<script type="module">
    // 引入 m1.js 模块内容
    import {school, study} from "./m1.js";
    // 引入 m2.js 模块内容
    import {school as s, findJob} from "./m2.js";
    // 引入 m3.js 模块内容
    import {default as m3} from "./m3.js";
    console.log(school);
    study();
    console.log(s);
    findJob();
    console.log(m3);
    m3.change();
</script>
</body>
</html>

9e0d24d72e8b9616a6b58fdd59406648.png

注意:针对默认暴露还可以直接 import m3 from "./m3.js"

7.1.19、浅拷贝和深拷贝

如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝;如果B没变,那就是深拷贝,深拷贝与浅拷贝的概念只存在于引用数据类型。

7.1.19.1、浅拷贝

var obj1 = {
    name: "张三",
    age: 20,
    speak: function () {
        console.log("我是" + this.name);
    }
};
var obj2 = obj1;
// 当修改obj2的属性和方法的时候,obj1相应的属性和方法也会改变
obj2.name = "李四";
console.log(obj1);
console.log(obj2);

c0a7273632a9dab00f457116f2111918.png


目录
相关文章
|
2月前
|
Web App开发 SQL Java
javaweb实现分页(二)
javaweb实现分页(二)
|
2月前
|
JSON Java 应用服务中间件
JavaWeb项目之乱码问题及如何解决
JavaWeb项目之乱码问题及如何解决
|
23天前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
|
24天前
|
前端开发 JavaScript Java
图书借阅管理平台|基于JavaWeb实现图书借阅系统
图书借阅管理平台|基于JavaWeb实现图书借阅系统
|
18天前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
22 0
|
2天前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
4 0
|
25天前
|
SQL Java 数据库连接
JavaWeb Mapper代理开发
JavaWeb Mapper代理开发
|
11天前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
16天前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
19 0
|
17天前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
12 0