ES6(二)

news2024/12/28 2:56:55

文章目录

  • 对象的扩展
    • 对象的展开运算符
    • Object.is()
    • Object.assign()
  • 字符串的扩展
    • includes(), startsWith(), endsWith()
    • repeat()
    • padStart(),padEnd()
    • trimStart(),trimEnd()
  • 运算符扩展
    • 指数运算符
  • Set
    • 方法
    • 应用
  • Map
    • 方法

对象的扩展

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}

// 等同于
const baz = {foo: foo};

对象的展开运算符

展开对象

const apple = {
    color: '红色',
    shape: '球形',
    taste: '甜'
};
console.log({...apple});			// { color: '红色', shape: '球形', taste: '甜' }
console.log({...apple} === apple);	// false

const apple = {
    color: '红色',
    shape: '球形',
    taste: '甜'
};

const pen = {
    color: '黑色',
    shape: '圆柱形',
    use: '写字'
};

// 新对象拥有全部属性,相同属性,后者覆盖前者
console.log({...apple, ...pen});	// { color: '黑色', shape: '圆柱形', taste: '甜', use: '写字' }
console.log({...pen, ...apple});	// { color: '红色', shape: '球形', use: '写字', taste: '甜' }

非对象的展开

console.log({...1});			// {}
console.log(new Object(1));		// [Number: 1]
console.log({...undefined});	// {}
console.log({...null});			// {}
console.log({...true});			// {}

Object.is()

Object.is('foo', 'foo')
// true
Object.is({}, {})
// false

Object.assign()

const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

字符串的扩展

字符串拼接的巨大区别

const person = {
    name: 'zjr',
    age: 18,
    sex: '男'
};

const info =
    '我的名字是:' + person.name +
    ',性别是:' + person.sex +
    ',今年:' + person.age + '岁';

console.log(info);

// 我的名字是:zjr,性别是:男,今年:18岁

const person = {
    name: `zjr`,
    age: 18,
    sex: ``
};

const info = `我的名字是:${person.name},性别是:${person.sex},今年:${person.age}`;

console.log(info);

// 我的名字是:zjr,性别是:male,今年:18岁

includes(), startsWith(), endsWith()

includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

repeat()

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

padStart(),padEnd()

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

trimStart(),trimEnd()

trimStart()和trimEnd()这两个方法,它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。

const s = '  abc  ';

s.trim() // "abc"
s.trimStart() // "abc  "
s.trimEnd() // "  abc"

运算符扩展

指数运算符

2 ** 2 // 4
2 ** 3 // 8

Set

Set 是一系列无序、没有重复值的数据集合。

const s = new Set();
s.add(1);
s.add(2);

// Set 中不能有重复的成员
s.add(1);
console.log(s);		// Set(2) { 1, 2 }

// Set 没有下标去标识每一个值,所以 Set 是无序的,也不能像数组那样通过下标去访问 Set 的成员。

方法

add 方法

const s = new Set();
s.add(0);
// 可以连写
s.add(1).add(2).add(2).add(3);
console.log(s);		// Set(4) { 0, 1, 2, 3 }

has 方法

const s = new Set();
s.add(0);
s.add(1).add(2).add(2).add(3);
console.log(s.has(1));	// true
console.log(s.has(4));	// false

delete 方法

const s = new Set();
s.add(0);
s.add(1).add(2).add(2).add(3);
s.delete(2);
// 使用 delete 删除不存在的成员,什么都不会发生,也不会报错
s.delete(4);
console.log(s);	// Set(3) { 0, 1, 3 }

clear 方法

const s = new Set();
s.add(0);
s.add(1).add(2).add(2).add(3);
s.clear();
console.log(s);	// Set(0) {}

forEach 方法

const s = new Set();
s.add(0);
s.add(1).add(2).add(2).add(3);

s.forEach(function (value, key, set) {
    // Set 中 value = key,原因:好多数据结构都有 forEach 方法,为了方便统一,所以参数是统一的,但是参数的意义各有不同
    // set 就是 s 本身
    console.log(value, key, set === s);
    console.log(this);
});

/*
0 0 true
Window
1 1 true
Window
2 2 true
Window
3 3 true
Window 
*/

size 属性

const s = new Set();
s.add(0);
s.add(1).add(2).add(2).add(3);

console.log(s.size);	// 4

应用

数组去重

const s = new Set([1, 2, 1]);
console.log(s);			// Set(2) { 1, 2 }
console.log([...s]);	// [ 1, 2 ]

字符串去重

const s = new Set('abbacbd');
console.log(s);					// Set(4) { 'a', 'b', 'c', 'd' }
console.log([...s].join(''));	// abcd

因此使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

在这里插入图片描述

Map

Map 可以理解为:“映射”。

Map 和 对象 都是键值对的集合。

// 键 ——> 值,key ——> value
// 对象:
const person = {
    name: 'alex',
    age: 18
};

// Map:
const m = new Map();
m.set('name', 'alex');
m.set('age', 18);
console.log(m);		// Map(2) { 'name' => 'alex', 'age' => 18 }

// Map 和 对象 的区别:
// 对象一般用字符串当作 “键”(当然在书写时字符串键的引号可以去掉).
// Map 中的 “键” 可以是一切类型。
const m = new Map();
m.set(true, 'true');
m.set({}, 'object');
m.set(new Set([1, 2]), 'set');
m.set(undefined, 'undefined');
console.log(m);
/*
Map(4) {
  true => 'true',
  {} => 'object',
  Set(2) { 1, 2 } => 'set',
  undefined => 'undefined'
}
*/

方法

set 方法
set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

const m = new Map();

m.set('edition', 6)        // 键是字符串
m.set(262, 'standard')     // 键是数值
m.set(undefined, 'nah')    // 键是 undefined

get 方法
get方法读取key对应的键值,如果找不到key,返回undefined。

const m = new Map();

const hello = function() {console.log('hello');};
m.set(hello, 'Hello ES6!') // 键是函数

m.get(hello)  // Hello ES6!

has 方法
has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

const m = new Map();

m.set('edition', 6);
m.set(262, 'standard');
m.set(undefined, 'nah');

m.has('edition')     // true
m.has('years')       // false
m.has(262)           // true
m.has(undefined)     // true

delete 方法
delete方法删除某个键,返回true。如果删除失败,返回false。

const m = new Map();
m.set(undefined, 'nah');
m.has(undefined)     // true

m.delete(undefined)
m.has(undefined)       // false

clear 方法
clear方法清除所有成员,没有返回值。

let map = new Map();
map.set('foo', true);
map.set('bar', false);

map.size // 2
map.clear()
map.size // 0

forEach 方法

m.forEach(function (value, key, map) {
    console.log(this);
}, document);

size 属性
size属性返回 Map 结构的成员总数。

const map = new Map();
map.set('foo', true);
map.set('bar', false);

map.size // 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DC系列靶机5通关教程

信息收集 主机扫描 sudo arp-scan -l端口扫描 nmap -p- -A 192.168.16.172漏洞发现 浏览器访问靶机IP 在Contact找到类似提交数据的地方 点击submit,数字发生变化。不断刷新的话,数字依然会发生变化 使用bp抓包发送重发器查看数据包 再次点击发送查看…

修改了Android Studio 中的这两个面板配置后,代码写的更舒服了~

本文已同步发表于我的微信公众号,微信搜索 代码说 即可关注,欢迎与我沟通交流。 一、 增加打开文件的数量及展示方式 如图,默认AS中打开的文件个数是10个,当超过10个时,超过的部分会直接隐藏,甚至会直接把之…

TCP详解之重传机制

TCP详解之重传机制 TCP 实现可靠传输的方式之一,是通过序列号与确认应答。 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。 但在错综复杂的网络,并不一定能如上图那么顺…

Oracle SQL操作和查询

文章目录 一、SQL简介二、数据类型讲解三、创建表和约束1.表结构2. 更新表结构3.约束 四、DML语句1.INSERT2.序列号3.UPDATE4.删除语句5.多行插入 五、DQL语句1.简单查询语句1.1 知识点讲解1.2 案例讲解 2.聚合函数3.分组查询4.多表查询 一、SQL简介 SQL是结构化查询语言&…

Procmon.exe在cuckoo中的使用

背景 最近研究了下procmon.exe,该工具用途可大了,Procmon是微软出品用于监视Windows系统里程序的运行情况,监视内容包括该程序对注册表的读写、 对文件的读写、网络的连接、进程和线程的调用情况,procmon 是一款超强的系统监视软…

typescript字面量类型

typescript 字面量介绍 在TypeScript中,字面量是指在代码中直接使用的具体值,如字符串、数字、布尔值等。字面量类型是TypeScript中的一种特殊类型,它用于定义一组有限的值,并且可以在定义变量或函数时使用字面量作为具体值&…

基于Java的养老院管理系统的设计与实现(亮点:多角色、登录验证码、留言反馈)

养老院管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 养老院…

【基础篇】四、SpringBoot整合第三方技术

文章目录 1、SpringBoot整合Junit2、SpringBoot整合MyBatis3、SpringBoot整合MyBatisPlus4、SpringBoot整合Druid 1、SpringBoot整合Junit 步骤: 导入测试对应的starter测试类使用SpringBootTest修饰使用自动装配的形式添加要测试的对象 SpringBootTest class Spri…

IDEA(2023)解决运行乱码问题

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…

Nginx 相关介绍(Nginx是什么?能干嘛?)

Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator…

【算法专题突破】滑动窗口 - 串联所有单词的子串(15)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:30. 串联所有单词的子串 - 力扣(LeetCode) 这道题其实也很好理解,看一下示例就基本知道是什么意思了, 主要就是找 s 里面…

day21算法

常见的七种查找算法: ​ 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构…

Ubuntu不能上网解决办法

问题及现象 Ubuntu的虚拟机(18.04)总是莫名就不能上网了。 使用ifconfig -a 查看,ensxx(xx为虚拟机分配的id号)对应的网卡有mac地址,但是没有分配ip地址。 Network中也没有Wired的选项。 临时解决方案 使…

深入学习 Redis Cluster - 集群缩容(全网最详细)

目录 一、集群缩容 1.1、准备环境 1.2、第一步,删除从节点 1.3、第二步,重新分配 slots 第一次分配:分配给 106 1365 个 slots 第二次分配:分配给102 1365 个 slots 此时查看集群状态,可以看到 110 节点不再持有…

【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)

一、漏洞介绍 CVE-2020-1472是一个Windows域控中严重的远程权限提升漏洞。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。该漏洞适用于Win2008及后…

C#实现钉钉自定义机器人发送群消息帮助类

一、自定义机器人发送群消息使用场景 在企业中,针对一些关键指标内容(如每天的生产产量、每天的设备报警信息等信息),需要同时给多人分享,此时就可以将需要查看这些数据的人员都拉到一个群中,让群里的机器人将这些关键指标内容推送到群里即可【(目前已实现在钉钉群里创建…

Pytorch-CNN-Mnist

文章目录 model.pymain.py网络设置注意事项及改进运行截图 model.py import torch.nn as nn class CNN_cls(nn.Module):def __init__(self,in_dim28*28):super(CNN_cls,self).__init__()self.conv1 nn.Conv2d(1,32,1,1)self.pool1 nn.MaxPool2d(2,2)self.conv2 nn.Conv2d(3…

2023上半年软件设计师上午题目总结

1 在计算机中系统总线用于连接 主存及外设部件 2 在由高速缓存、主存、硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,DMA控制器和中断CPU发出的数据地址是 主存物理地址 。 DMA(Direct Memory Access)控制器是计算机硬…

Nacos深入原理从源码层面讲解

文章目录 1 Nacos原理1.1 Nacos架构1.2 注册中心原理1.3 SpringCloud服务注册1.4 NacosServiceRegistry实现1.4.1 心跳机制1.4.2 注册原理1.4.3 总结 1.5 服务提供者地址查询1.6 Nacos服务地址动态感知原理 1 Nacos原理 1.1 Nacos架构 Provider APP:服务提供者Cons…

STM32 学习笔记1:STM32简介

1 概述 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起来理解,STM32 就是 ST 公司开发的 32 位微控制器。是一款基于 ARM 公司推出的基于 ARMv7 架构的 32 位 Co…