尚硅谷ES6复习总结下(65th)
admin
2024-03-02 13:11:40
0

1、Set(集合)

1.1、Set 的定义和使用

ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用扩展运算符和for...of进行遍历。

集合(这里假设有一个集合 st)的属性和方法

1、st.size:返回集合个数
2、st.add(item):往集合中添加一个新元素 item,返回当前集合
3、st.delete(item):删除集合中的元素,返回 boolean
4、st.has(item):检测集合中是否包含某个元素,返回 boolean
5、st.clear():清空集合
6、集合转为数组:[...st]
7、合并两个集合:[...st1, ...st2]

示例

//创建一个非空集合
let s1 = new Set([1,2,3,1,2,3]);
/*集合属性与方法*/ 
//返回集合的元素个数
console.log(s1.size);
//添加新元素
console.log(s1.add(4)); 
//删除元素 
console.log(s1.delete(1)); 
// 检测是否存在某个值 
console.log(s1.has(2)); 
//清空集合
console.log(s1.clear());

1.2、集合案例

案例1: 数组去重

let arr1 = [1, 2, 2, 3, 3, 3, 4, 1, 2];
let res1 = [...new Set(arr1)];  // 扩展运算符将集合转变为数组
console.log(res1); // [ 1, 2, 3, 4 ]

案例2:数组求交集

let arr1 = [1, 2, 2, 3, 4, 5];
let arr2 = [3, 6, 6, 7, 1, 4];
let res = arr1.filter(v => new Set(arr2).has(v))
console.log(res); // [ 1, 3, 4 ]

案例3:数组求并集

let arr1 = [1, 2, 2, 3, 4, 5];
let arr2 = [3, 6, 6, 7, 1, 4];
let res = [...new Set([...arr1, ...arr2])];  // 都合起来再去重
console.log(res); // [ 1, 2, 3, 4, 5, 6, 7 ]

案例4:数组求差集(1和2的一个差集就是1里有但2里没有的,这玩意分主体)

let arr1 = [1, 2, 2, 3, 4, 5];
let arr2 = [3, 6, 6, 7, 1, 4];
let res = [...new Set(arr1)].filter(v => !(new Set(arr2).has(v)))  // 交集的逆运算,非一下里面的运算就行了
console.log(res); // [ 2, 5 ]

2、Map

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

let mp1 = new Map();
mp1.set('aaa', 111);
mp1.set('bbb', 222);
mp1.set('ccc', 333);let mp2 = new Map([['aaa', 111],['bbb', 222],['ccc', 333]
]);console.log(mp1['aaa']); // 111
console.log(mp2.get('bbb')); // 222

Map 的属性和方法:(k 为键,v为值)

size:返回 Map 的元素(键值对)个数
set(k, v):增加一个键值对,返回当前 Map
get(k):返回键值对的键值
has():检测 Map 中是否包含某个元素
clear():清空集合,返回 undefined

3、数值扩展

1、Number.EPSILONJavaScript 表示的最小精度,一般用来处理浮点数运算。例如可以用于两个浮点数的比较。

let equal = (x, y) => Math.abs(x - y) < Number.EPSILON;
console.log(0.1 + 0.2 === 0.3); // false
console.log(equal(0.1 + 0.2, 0.3)); // true

2、二进制和八进制:二进制以 0b 开头,八进制以 0o 开头。

let b = 0b1010;
let o = 0o777;
let d = 100;
let x = 0xff;
console.log(x);

3、Number.isFinite 检测一个数值是否为有限数。

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

4、Number.parseIntNumber.parseFloat
ES6 给 Number 添加了 parseInt 方法,Number.parseInt 完全等同于 parseInt。将字符串转为整数,或者进行进制转换。Number.parseFloat 则等同于 parseFloat

Number.parseInt === parseInt; // true
Number.parseFloat === parseFloat; // true
console.log(Number.parseInt('5211314love')); // 5211314
console.log(Number.parseFloat('3.1415926神奇')); // 3.1415926

5、Number.isInteger() 判断一个数是否为整数。

console.log(Number.isInteger(5)); // true
console.log(Number.isInteger(2.5)); // false

6、Math.trunc() 将数字的小数部分抹掉。

console.log(Math.trunc(3.5)); // 3

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

4、对象方法扩展

ES6 新增了一些 Object 对象的方法。

1、Object.is 比较两个值是否严格相等,与===行为 基本一致
2、Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象
3、__proto__setPrototypeOfsetPrototypeOf 可以直接设置对象的原型

4.1 Object.is()

Object.is() 方法判断两个值是否完全相同。Object.is 比较两个值是否严格相等,与 === 行为 基本一致。返回一个 Boolean 类型。

Object.is(value1, value2);

Object.is() 方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:

1、都是 undefined
2、都是 null
3、都是 truefalse
4、都是相同长度的字符串且相同字符按相同顺序排列
5、都是相同对象(意味着每个对象有同一个引用)
6、都是数字且
1、都是 +0
2、都是 -0
3、 都是 NaN
4、或都是非零而且非 NaN 且为同一个值

1、与 == 运算不同。 == 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换
(这种行为的结果会将 "" == false 判断为 true),而 Object.is 不会强制转换两边的值。

2、与 ===也有点区别。 === 运算符 (也包括 == 运算符) 将数字 -0 和 +0 视为相等,而将 Number.NaNNaN 视为不相等

4.2 Object.assign(合并对象)

Object.assign 对象的合并,相当于浅拷贝。

const config1 = {host: 'localhost',port: 3306,name: 'root',pass: 'root',test: 'test'
};
const config2 = {host: 'http://atguigu.com',port: 33060,name: 'atguigu.com',pass: 'iloveyou',test2: 'test2'
}
console.log(Object.assign(config1, config2));

4.3 Object.setPrototypeOf 和 Object.getPrototypeof

Object.setPrototypeOf 用于设置对象的原型对象,Object.getPrototypeof 用于获取对象的原型对象,相当于 __proto__

const school = {name: '尚硅谷'
}
const cities = {xiaoqu: ['北京','上海','深圳']
}
Object.setPrototypeOf(school, cities);
console.log(Object.getPrototypeOf(school));
console.log(school);

5、ES6 模块化

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

模块化的好处

模块化的优势有以下几点:

1、防止命名冲突
2、代码复用
3、高维护性

模块化规范产品

ES6 之前的模块化规范有:

1、CommonJS => NodeJS、Browserify
2、AMD => requireJS
3、CMD => seaJS

ES6 模块化语法

模块功能主要由两个命令构成:exportimport

1、export 命令用于规定模块的对外接口
2、import 命令用于输入其他模块提供的功能

1、分别暴露

// 单个导出
export let uname = 'Rick';
export let sayHello = function () {console.log('Hi, bro!');
}

2、统一暴露

let uname = 'Rick';
let sayHello = function () {console.log('Hi, bro!');
}
// 合并导出
export { uname, sayHello };

3、默认暴露

// 默认暴露
export default {uname: 'Rick',sayHello: function () {console.log('Hi, bro!');}
}

4、模块导入

1、通用导入方式

import * as m1 from './js/m1.js';
import * as m2 from './js/m2.js';
import * as m3 from './js/m3.js';

2、解构赋值形式导入

import { uname, sayHello } from './js/m1.js';
// 有重复名可以设置别名
import { uname as uname2, sayHello as sayHello2 } from './js/m2.js';
console.log(uname);
// 配合默认导出
import {default as m3} from "./src/js/m3.js";

3、简便方式导入,针对默认暴露

import m3 from "./src/js/m3.js";  // 用导入的模块名称作为函数名

5、ES6 使用模块化方式2

将文件导入都写进一个 app.js 文件中,然后在里面写入要导入的模块。app.js 中的内容如下:

import * as m1 from './js/m1.js';
import * as m2 from './js/m2.js';
import * as m3 from './js/m3.js';console.log(m1);
console.log(m2);
console.log(m3);

index.html 中引入 app.js 文件内容:


6、使用 babel 对模块化代码转换

有的浏览器不支持 ES6 语法,这时候就需要使用 babel 来将其转换成 ES5 等价语法。

1、安装工具

npm i babel-cli babel-preset-env browserify(webpack) -D

2、编译

npx babel src/js -d dist/js --presets=babel-preset-env

3、打包

npx browserify dist/js/app.js -o dist/bundle.js

7、ES6 模块化引入 npm 安装的包

npm install jquery

再通过 import 导入即可。

相关内容

热门资讯

探访“中国凉都”六盘水,重庆游... 01:35 炎炎夏日,外地避暑大军已抵达“中国凉都”六盘水,上游新闻记者探访野玉海国家级旅游度假区,...
原创 西... 夏日的餐桌上,总少不了一抹诱人的红色。西红柿作为家常食材中的"百搭之王",大多数人习惯用它炒鸡蛋、炖...
今天大暑,记住“吃三样,做二事... 嘿,咱来说说大暑这个节气哈。这大暑啊,那可是一年里最热的时候,就跟掉进了超级大火炉似的,热得人受不了...
走在银发科技前沿:红松如何用理... 导语 “我想用五指毛桃煲汤,放什么其他材料好呢?” 没有提问乐理,没有咨询作业,这是90岁的黄育智...
第八届SIAL茶饮调配师大赛金... 7月18日,第八届SIAL茶饮调配师大赛圆满结束。 第八届 SIAL 茶饮调配师大赛由2025 SI...
宝宝为什么要闹觉呢? 宝宝为什么要闹觉呢?你好,宝宝吵瞌睡在医学上叫做黄昏焦虑症,主要是新生儿宝宝暂时还没有能力分清白天和...
女演员称“在哀牢山上班”,云南... 7月21日下午,演员袁姗姗在个人微博发布多张照片并配文称:我在哀牢山上班。其IP地址显示在云南。 ...
涠洲岛跟团游哪家含潜水项目? 涠洲岛位于北海市的南方,是中国创新的火山岛,以其美丽的海岸线、清澈的海水和丰富的海洋生物而闻名。近年...
心智观察所:雅鲁藏布江的世纪工... 【文/观察者网专栏作者 心智观察所】 7月19日上午,堪称世纪工程的雅鲁藏布江下游水电工程(下文简...
游客在断桥边偷摘西湖荷花,景区... 赏荷,是这个季节到西湖边的规定动作,眼下西湖荷花已进入最佳观赏期。不论是南来北往的游客,还是杭州本地...
夏季避暑好去处 | 张家界五天... 张家界五日趣,萌娃与山水的欢乐邂逅 张家界,是大自然特意为孩子们打造的奇幻乐园,峰林是巨人的玩具,溪...
探寻广东21城体育性格|东莞篇... 熟悉篮球的人通常会听到这样一句话:中国篮球看广东,广东篮球看东莞。在东莞,两支顶级职业篮球俱乐部星光...
湖南张家界旅游必看攻略!暑假去... 2025张家界5日游终极攻略:暑假家庭游必看路线与景点全解析 一、人间仙境张家界:大自然的鬼斧神工...
新加坡旅游局邀全国旅业共创“乐... 【品橙旅游】2025年7月21日,新加坡旅游局正式启动面向全国旅游业界的重磅活动——“乐龄银发族旅游...
清凉火把季·20℃游越西|越西... 越西县火把节虽已落幕,但县域内景区景点依旧人气高涨,其中相岭雪星空露营基地,凭借独特自然景观与惬意氛...
邂逅巴中石窟 一睹崖壁上的盛唐... 巴中石窟,是古人凿刻在崖壁上的智慧结晶。它穿透千年风雨,看过朝代更迭的繁华与落寞,至今仍以磅礴姿态矗...
去黄山旅游3天费用是多少?安徽... 黄山,作为中国著名的风景名胜区,以其奇松、怪石、云海、温泉四绝闻名于世,一直是众多游客向往的旅游胜地...
华佗 的拼音 华佗 的拼音huatuo
怎样自制小发饰 怎样自制小发饰可爱一点的跟好,要详细一点的,要有图哦准备的材料很简单哦!~1、在小摊上每一根很便宜的...
怎么学十孔口琴 怎么学十孔口琴本人会吹半音阶,吹的还算好,十孔口琴的音都能准确吹出来,能压音,但不知道怎么样才能吹出...