热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js高级:es6es11第五天

基础模板字符串的使用利用来创建字符串,使用${}插入letnameaaaletage14letifomynameis${name},ageis${a

 基础模板字符串的使用

利用``来创建字符串,使用${}插入


标签模板字符串

let name = 'aaa'let age = 14function fn(...args){console.log(args);}fn`my name is ${name},age is ${age}`

第一个是普通的数组,放入被分割之后的字符串,后面的参数就是调用的字符串


展开运算符

const aaa = [123,'ooo',234,'oio']const bbb = 'hello'function foo(a,b,...c){console.log(a,b,c);}foo(...aaa)foo(...bbb)

也就是说...可以将字符串或者数组拆开

对于对象,在构建对象字面量的时候可以使用,但是不能像上面那样传入函数

const obj = {name : 111,age :12}function foo(a,b,...c){console.log(a,b,c);}//foo(...obj)这是不允许的const obj1 ={...obj,sex:1}console.log(obj1);

 数字表示

//二进制console.log(0b100);//8进制console.log(0o100);//16进制console.log(0x100);

输出还是按照十进制来的

长数字,用下划线分割

const bignum = 100_000_212_221console.log(bignum);

Symbol

也是基本数据类型

 比如

const obj = {fn:111}function foo(obj){obj.fn = function(){}}foo(obj)

当我带入函数时,我其实是想添加新的属性fn,但是我不能确定原本的obj中是否有fn属性

symbol就是为了解决这种问题,为了创造一个独一无二的值

symbol可以作为对象的key

const ss = Symbol()const obj1 = {ss:111,[ss]:1222}console.log(obj1);

 这样是不会冲突的

之前的函数可以改为:

const obj = {fn:111}function foo(obj){const fn = Symbolobj[fn] = function(){}}foo(obj)console.log(obj);

这样就不会冲突了


得到对象中的symbol

const s1 = Symbol()const obj = {age :111,[s1]:222,name :000}console.log(Object.keys(obj));

只会得到age  name

可以采用下面的方法得到symbol里面的值

const s1 = Symbol()const s2 = Symbol()const obj = {age :111,[s1]:222,[s2]:2122,name :000}console.log(Object.getOwnPropertySymbols(obj));for(let i of Object.getOwnPropertySymbols(obj)){console.log(i);//只能输出symbol,不能输出s1 s2console.log(obj[i]);// 222 2122}

symbol在创建的时候可以传入description

const s3 = Symbol('ccc')console.log(s3.description);

可以利用这个创造两个相同的symbol

const s3 = Symbol('ccc')console.log(s3.description); const s4 =Symbol.for(s3.description)const s5 =Symbol.for(s3.description)console.log(s4 === s5);//true

这个用的不多 很特殊的情况才会用


可以获取描述

console.log(Symbol.keyFor(s4));//ccc

Set

这两个都是新的数据结构

set是集合

 基本调用

const s = new Set()s.add(123)s.add(2828)s.add(2828)console.log(s);//123,2828

 数组去重

const old = [123,123,222,222,333,333]//数组去重const new1 =new Set(old)const newarray = Array.from(new1)console.log(newarray);

其他方法 

 WeakSet

weakset只能放对象类型,对所有对象的引用都是弱引用

也就是时候其引用的对象 有可能在后期被销毁,所以不能遍历

这个用的不多


Map

表示一种映射关系,跟对象很类似 

如果我们想要使用对象作为key,例如

const ss = {name :12}const ss1 = {age:22}const obj ={[ss]:2222,[ss1]:2121}console.log(obj);

 但是这样不是将对象作为的key,只是把对象转换为了字符串,所以最后打印结果只有一个映射关系

使用map就可以

const mapp = new Map()mapp.set(ss,'aaaa')mapp.set(ss1,2322)console.log(mapp);

 

 WeakMap

key只能为对象对所有对象的引用都是弱引用,跟weakset类似


字符串填充

padstart(a,b),向前填充,一共长度为a,填充为b

 padend向后填充

const ss = '1'.padStart(3,'0')const ss1 = '1'.padEnd(3,'0')console.log(ss);//001console.log(ss1);//100

应用,敏感信息遮盖

const ss = '12345678901234'const slicess = ss.slice(-4);console.log(slicess.padStart(ss.length,'*'));


尾部逗号

就是可以在参数末尾加逗号

function fn(a,b,){}

flat

 例子

const ss = [1,2,3,4,[2,3],[2,4],[[2,3],[6,7]]]console.log(ss.flat(1));//[1, 2, 3, 4, 2, 3, 2, 4, Array(2), Array(2)]console.log(ss.flat(2));//[1, 2, 3, 4, 2, 3, 2, 4, 2, 3, 6, 7]

将数组在n维上平坦化

flatMap() 

const aa = ['aaa bbb ccc','ddd eee fff','ggg hhh mmm']const bb = aa.map(item =>item.split(' '));const cc = bb.flat(1)console.log(cc);//['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh', 'mmm']const dd = aa.flatMap(item =>item.split(' '))console.log(dd);//和上面一样

 entries

将对象转换为数组

const obj = {name:123,age:222}const sss =Object.entries(obj)//[['name', 123],['age', 222]]const sss1 =Object.fromEntries(sss)

bigint

在很大的值后面加n  以确保其准确性

console.log(Number.MAX_SAFE_INTEGER);//9007199254740991const bigg = 9007199254740996nconsole.log(bigg);//9007199254740996n

但是如果要运算,都必须加n

console.log(bigg-100000n)

空值合并运算符

obj?.fn?.run()

​​​​​​​

function fn(aa){aa = aa??'默认'console.log(aa);}fn()//默认fn(null)//默认fn(0)//0

当aa是未定义undefined或者null,就赋予 默认,否则保持原值


可选链

对于

const obj ={fn:{run:function(){console.log(111);}}}if(obj.fn && obj.fn.run){obj.fn.run()}

加if判断的原因是,经常这个obj有没有那些属性和方法我们是不知道的,为了防止报错就用if判断一下

现在可以更简洁

obj?.fn?.run?.()


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
小小追求者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有