当前位置: 首页 > news >正文

ES6(二):解构赋值、Symbol、Map和Set、数组的扩展方法

一、解构赋值

1.完全解构

let people={name:'hh',color:'pink'}//es5写法let name=people.name;let color=people.color;console.log(name);console.log(color);//es6let{name,color}=people;console.log(name,color);

注意:let{}里面的名字要跟对象里面的一样,要不人家哪知道你想要的是哪个

2.不完全解构

就是里面的那些值我不都要

let people={name:'hh',color:'pink',c:[],d:'hello'}let{d}=people;console.log(d);

在这里总结一下...的用法

(1)合并数组:[...arr,...brr]可以合并两个数组(扩展运算符)

var arr=['a','b','c'];var brr=[1,2,3];console.log([...arr,...brr]);
//(6) ['a', 'b', 'c', 1, 2, 3]

(2) 拷贝数组对象:有点像拆开再一个一个装进去,直接赋值不好吗

var arr=['a','b','c'];var brr=[...arr];console.log(brr);
(3) ['a', 'b', 'c']

(3)字符串转字符数组:使用`[...字符串对象]`可以将一个字符串转换为一个字符数组。(展开运算符)

var arr='hello world!'var brr=[...arr];console.log(brr);
//(12) ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']

(4)解构变量:使用`[变量对象,...name]=值`可以将多个值分配给多个变量,其中`变量对象`表示一个包含多个变量的对象,`...name`表示将剩余的值分配给`name`变量。(剩余运算符)


// 用剩余运算符解构对象
let people={name:'hh',color:'pink',c:[],d:'hello'}let {name,...rest}=people;console.log(name);console.log(rest);//hh//{color: 'pink', c: Array(0), d: 'hello'}// 用剩余运算符解构数组var [brr,...t]=[1,2,5,8];console.log(t);//[2, 5, 8]

第一个值分一个,...分后面剩余的,成立一个数组

如果...放在形参的话,当arguments用

3.重命名

如果想给某个属性重命名

let people={name:'hh',color:'pink',c:[],d:'hello'}let {name:jj,color:black}=people;console.log(jj,black);//hh pinkconsole.log(people);//people数组不变

不知道为啥原来的数组属性名也没变(存疑一下)

4.数组解构

       let arr=[1,2,3];let [a,b,c]=arr;console.log(a,b,c);

二、Symbol数据类型(用得少)

symbol表示独一无二的值

1.相同参数的Symbol函数返回值不等:

最大的用途:用来定义对象的私有变量

const name1=Symbol('name');const name2=Symbol('name');console.log(name1==name2);//false

2.如果用symbol定义对象中的变量,取值时得[变量名]

let s1=Symbol('s1');let obj={[s1]:'jj'}console.log(obj[s1]);//jj

注意:里面和外面都得用[ ]

而且symbol这种方法不能通过for循环(key in obj)来获取,用下面这两种方法

(1)Object.getOwnPropertySymbols(obj)

const s1=Symbol('s1');let obj={[s1]:'hh'}let t=Object.getOwnPropertySymbols(obj);console.log(t[0]);
//Symbol(s1)

(2)Reflect.ownKeys(obj)

const s1=Symbol('s1');let obj={[s1]:'hh'}let t=Reflect.ownKeys(obj);console.log(t);//[Symbol(s1)]

三、Map和Set数据结构

1.set:集合——无重复值的有序列表

(1)添加元素set.add()

会忽略重复添加的值,代码如下

(2)删除元素set.delete()

let set=new Set();console.log(set);set.add(2);set.add([1,2,3]);set.add('4');set.delete(2);//让它等于null还是会保留console.log(set);//Set(2) {Array(3), '4'}

(3)校验某个值是否存在set.has()

console.log(set.has('4'));//true

(4)查看长度set.size()

set.clear();清除所有成员

(5)set遍历操作forEach

let set=new Set([1,9,3]);set.forEach((value,key)=>console.log(key))

注意:因为set结构没有键值,所以key和value方法行为完全一致后面写key或者value得到的是一样的。

(6)set实现数组去重

let set=new Set([1,9,3,3,4,1]);console.log([...set]);//1,9,3,4

(7)set实现字符串去重

let set=new Set('abcdeab');console.log(set);//{'a', 'b', 'c', 'd', 'e'}set=[...set].join('');console.log(set);//abcde

2.Map

属性:
Map.prototype.size:返回Map实例的成员总数。
方法:
Map.prototype.set(key, value)
Map.prototype.get(key)
Map.prototype.has(key)has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
Map.prototype.delete(key)delete方法删除某个键,返回true。如果删除失败,返回false。
Map.prototype.clear()clear方法清除所有成员,没有返回值。
遍历操作:
Map.prototype.keys():返回键名的遍历器
Map.prototype.values():返回键值的遍历器
Map.prototype.entries():返回键值对的遍历器
Map.prototype.forEach():遍历 Map 的所有成员
 

map类型是键值对的有序列表,键和值可以是任意类型

        let map=new Map();map.set('姓名','章三');map.set('性别','女');console.log(map);console.log(map.get('姓名'));

四、数组的扩展方法

1.Array.form()转换为一个真数组

function add(){console.log(arguments);let arr=Array.from(arguments);console.log(arr);}add(1,2,3);

比如将ul里的li转换为真正的数组

<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>let lis=document.querySelectorAll('li');console.log(lis);//NodeList(4) [li, li, li, li]console.log(Array.from(lis));

也可以这样写:

console.log([...lis]);//(4) [li, li, li, li]

form还接受第二个参数,用来对每个元素进行处理

let lisContent=Array.from(lis,c=>c.textContent);console.log(lisContent);
//(4) ['1', '2', '3', '4']

2.of()将任意数据类型转换为数组

let lisContent=Array.of('2','arr',[1,2,3],{text:1});console.log(lisContent);//(4) ['2', 'arr', Array(3), {…}]

3.copywithin()指定位置元素复制到其他位置

console.log([0,1,4,8,2].copyWithin(0,2));
//(5) [4, 8, 2, 8, 2]

意思就是把从数组[2]开始到后面的数复制到[0]开始的位置,后面的不变

4.find()findiIndex()

find()找出第一个符合条件的数组成员

console.log([1,2,-20,0,5].find(n=>n<0));//20

findiIndex()找出第一个符合条件的数组成员的索引号

console.log([1,2,-20,0,5].findIndex(n=>n<0));//2

5.数组中的keys()values()entries()遍历

keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历

let arr = ['a', 3, 5]
for (let key of arr.keys()) {console.log(key);  //0 1 2
}
for (let value of arr.values()) {console.log(value); // a 3 5
}
for (let [key, value] of arr.entries()) {console.log(key, value);//0 'a'//1 3//2 5
}

也可以用next遍历

//返回一个遍历器对象
let item = arr.entries();
console.log(item.next());  //{value: [0,'a'], done: false} 
console.log(item.next().value);  //[1,3]
console.log(item.next().value);  //[2,'b']
console.log(item.next().value);  //undefined

6.includes()判断某个元素是否在数组中

      let a=['2','abc',4];console.log(a.includes('2'));//trueconsole.log(a.includes(2));//false

相关文章:

  • 【漏洞复现】大华智慧园区综合管理平台deleteftp命令执行漏洞
  • 从零开始的LeetCode刷题日记:替换数字
  • 小白必看的Python基础之函数篇
  • 如果网络不好 如何下载huggingface上的模型
  • 华为三层交换机:ACL的基本实验
  • WPF制作带图标和文字的按钮模板(通过附加属性实现)
  • 3、设计模式之工厂模式2(Factory)
  • Ubuntu 20.04 系统如何优雅地安装NCL?
  • web 课程
  • Linux-新手小白速秒Hadoop集群全生态搭建(图文混编超详细)
  • 用户数据的FLASH存储与应用(FPGA架构)
  • rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
  • HarmonyOS NEXT应用开发—状态栏显隐变化
  • 嵌入式学习39-程序创建数据库及查找
  • 24计算机考研调剂 | 太原科技大学
  • 【node学习】协程
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • eclipse的离线汉化
  • JavaScript函数式编程(一)
  • Java读取Properties文件的六种方法
  • js
  • js ES6 求数组的交集,并集,还有差集
  • npx命令介绍
  • Python学习笔记 字符串拼接
  • React系列之 Redux 架构模式
  • SpingCloudBus整合RabbitMQ
  • spring security oauth2 password授权模式
  • 从重复到重用
  • 对象管理器(defineProperty)学习笔记
  • 工作中总结前端开发流程--vue项目
  • 后端_ThinkPHP5
  • 浅谈web中前端模板引擎的使用
  • 详解移动APP与web APP的区别
  • 学习HTTP相关知识笔记
  • 用Canvas画一棵二叉树
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云ACE认证之理解CDN技术
  • ​TypeScript都不会用,也敢说会前端?
  • !!java web学习笔记(一到五)
  • # 计算机视觉入门
  • ###C语言程序设计-----C语言学习(3)#
  • (04)odoo视图操作
  • (a /b)*c的值
  • (floyd+补集) poj 3275
  • (function(){})()的分步解析
  • (LeetCode 49)Anagrams
  • (Oracle)SQL优化技巧(一):分页查询
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (层次遍历)104. 二叉树的最大深度
  • (第一天)包装对象、作用域、创建对象
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'