纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

20个JavaScript技术善于利用,可提升自己的开发效率

8月24日 溷元楼投稿
  1、Array。prototype。includes()
  includes()方法用来判断一个数组中是否包含某个指定的值,包含则返回true,否则返回false。
  语法
  arr。includes(findVal〔,index〕)
  index可选,表示从index索引处开始往后查找。如果为负值,表示从末尾开始往前跳index个索引,然后往后查找。默认值为0。
  letarr〔leo,lion,ggj〕
  console。log(arr。includes(leo))true
  console。log(arr。includes(gao))false
  console。log(arr。includes(ggj,1))true
  console。log(arr。includes(Leo))false
  注意:使用includes()查找字符串是区分大小写的。
  2、幂运算符
  求某个数的幂,之前一般使用Math。pow()
  console。log(Math。pow(2,10));1024
  使用幂运算符
  console。log(210);1024
  注意:幂运算符的两个号之间不能出现空格,否则语法会报错。
  3、Object。values()
  Object。values()返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历属性对应的值
  letobj{
  name:leo,
  age:18,
  like:music
  };
  console。log(Object。values(obj));〔leo,18,music〕
  4、Object。entries()
  Object。entries()方法返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历属性的键值对数组
  letobj{
  name:leo,
  age:18,
  like:music
  };
  console。log(Object。entries(obj));〔〔name,leo〕,〔age,18〕,〔like,music〕
  扩展:Object。keys()方法返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历的属性
  letobj{
  name:leo,
  age:18,
  like:music
  };
  console。log(Object。keys(obj));〔name,age,like〕
  注意:如果传入的参数是数组,则返回的是所有可遍历的索引。
  5、Object。getOwnPropertyDescriptors()
  Object。getOwnPropertyDescriptors()方法用来获取传入对象的所有自身属性的描述符
  letobj{
  name:leo,
  age:18,
  like:music
  };
  letdescObject。getOwnPropertyDescriptors(obj);
  console。log(desc);
  打印结果
  {
  name:{
  value:leo,value表示当前对象的默认值
  writable:true,writable表示对象属性是否可以修改
  enumerable:true,enumerable表示当前这个属性是否可以出现在对象的枚举属性中
  configurable:true表示当前对象的属性能否用delete删除
  },
  age:{
  value:18,
  writable:true,
  enumerable:true,
  configurable:true
  },
  like:{
  value:music,
  writable:true,
  enumerable:true,
  configurable:true
  }
  }
  我们可以使用Object。defineProperty()修改属性
  letobj{};
  Object。defineProperty(obj,name,{
  value:leo,
  writable:false,设置为false,该属性无法修改
  configurable:false,设置为false,该属性不支持delete删除
  enumerable:false,设置为false,该属性不可被枚举
  });
  验证
  console。log(obj);{name:leo}
  obj。
  console。log(obj);{name:leo}
  deleteobj。name
  console。log(obj);{name:leo}
  for(letkeyinobj){
  console。log(key);
  }
  6、String。prototype。padStart
  把指定字符串填充到字符串头部,返回新字符串。
  语法
  str。padStart(targetLength〔,padString〕)
  targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
  padString:可选,如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。默认值为。
  abc。padStart(10);abc,填充默认值
  abc。padStart(10,);abc
  abc。padStart(6,123465);123abc
  abc。padStart(1);abc
  举例
  日期格式化:yyyymmdd的格式
  letdatenewDate();
  letyeardate。getFullYear();
  月日如果是一位前面给它填充一个0
  letmonth(date。getMonth()1)。toString()。padStart(2,0);
  letday(date。getDate())。toString()。padStart(2,0);
  console。log({year}{month}{day});20220109
  数字替换(手机号,银行卡号等)
  lettel18937640746
  letnewTeltel。slice(4)。padStart(tel。length,)
  console。log(newTel)0746
  7、String。prototype。padEnd
  把指定字符串填充到字符串尾部,返回新字符串。
  语法与padStart相同
  abc。padEnd(10);abc,填充默认值
  abc。padEnd(10,);abc
  abc。padEnd(6,123456);abc123
  abc。padEnd(1);abc
  7、asyncawait
  前面添加了async的函数在执行后都会自动返回一个Promise对象
  functionfn(){
  
  }
  console。log(fn());leo
  添加async后
  asyncfunctionfn(){
  Promise。resolve(leo)
  }
  console。log(fn());Promise对象
  async函数中使用await,那么await处的代码就会变成同步的,即只有等await后面的Promise执行完成得到结果才会继续往下执行,await意为等待
  functiontimeout(){
  returnnewPromise(resolve{
  setTimeout((){
  console。log(1);
  resolve();
  },1000);
  })
  }
  asyncfunctionfn(){
  awaittimeout();执行完成才继续往下执行
  console。log(2);
  }
  fn();不加async和await是2、1,加了是1、2
  注意:
  1、await只能在async标记的函数内部使用,单独使用会触发S
  2、await后面需要跟异步操作,不然就没有意义,而且await后面的Promise对象不必写then,因为await的作用之一就是获取后面Promise对象成功状态传递出来的参数。
  更多详情请参考(具体场景)
  Js异步请求按顺序调用解决方案(真实工作场景,axios、Promise、asyncawait)前端不释卷leo的博客CSDN博客
  需求背景:现在需要调用多个异步请求,要求某个请求调用成功之后,接着调另外的请求,有时候需要用上一个请求得到的结果,作为下一个请求的参数或者条件,继续调用另一个请求。演示准备:安装axiosnpminstallaxiossave全局使用main。jsimportaxiosfromaxiosVue。prototype。axiosaxios实现一:PromisePromise是一个ECMAScript6提供的类,目的是更加优雅地书写复。
  https:blog。csdn。netqq41809113articledetails121086178?spm1001。2014。3001。5502
  8、RestSpread
  spread例子
  lettext{
  a:1,
  b:2,
  c:3,
  }
  letnewText{
  。。。text,
  c:4
  }
  console。log(newText);{a:1,b:2,c:4}
  这块代码展示了spread语法,可以把text对象的数据都拓展到newText对象,这个功能很实用。需要注意的是,如果存在相同的属性名,后面的会把前面的覆盖。
  如果属性的值是一个对象的话,该对象的引用会被拷贝,而不是生成一个新的对象
  letobj{x:{y:10}};
  letcopy1{。。。obj};
  letcopy2{。。。obj};
  obj。x。
  console。log(copy1,copy2);{x:{y:leo}}{x:{y:leo}}
  console。log(copy1。xcopy2。x);true,x为同一个引用
  rest例子
  lettext{
  a:1,
  b:2,
  c:3
  }
  let{a,。。。rest}text
  console。log(a,rest);1{b:2,c:3}
  当对象keyvalue不确定的时候,把必选的key赋值给变量,用一个变量接收其他可选的key数据,这在之前是做不到的。注意,rest属性必须始终出现在对象的末尾,否则将抛出错误。
  9、forawaitof
  异步迭代器(forawaitof):循环等待每个Promise对象变为resolved状态才进入下一步。
  for。。。of是同步运行
  functionTimeOut(time){
  returnnewPromise(function(resolve,reject){
  setTimeout(function(){
  resolve(time);
  },time);
  })
  }
  asyncfunctiontest(){
  letarr〔TimeOut(2000),TimeOut(1000),TimeOut(3000)〕;异步迭代器
  for(letitemofarr){
  console。log(item。then(console。log));
  }
  }
  test();
  1000
  2000
  3000
  forof方法不能遍历异步迭代器,得到的结果并不是我们所期待的,此时可以使用forawaitof
  functionTimeOut(time){
  returnnewPromise(function(resolve,reject){
  setTimeout(function(){
  resolve(time);
  },time);
  })
  }
  asyncfunctiontest(){
  letarr〔TimeOut(2000),TimeOut(1000),TimeOut(3000)〕;
  forawait(letitemofarr){按arr中顺序执行且返回
  console。log(item);
  }
  }
  test();
  2000
  1000
  3000
  使用forawaitof,则等待每个Promise对象变为resolved状态才进入下一步,因此打印的结果为2000,1000,3000。
  10、Promise。prototype。finally()
  Promise执行时,无论结果是fulfilled或者是rejected,在执行then()或catch()后,都会执行finally()指定的回调函数,可以避免同样的语句需要在then()和catch()中各写一次的情况
  newPromise((resolve,reject){
  setTimeout((){
  resolve(success);
  },1000);
  })。then(res{
  console。log(res);
  })。catch(err{
  console。log(err);
  })。finally((){无论Promise结果是then(),即还是catch(),即reject,最后都会执行finally()
  console。log(finally);
  })
  如每次请求发送完毕,就需要关闭loading提示框,不管请求成功或是失败,这个loading都需要关闭掉,这时把关闭loading的代码写在finally里再合适不过了。
  11、Object。fromEntries()
  Object。fromEntries()把键值对列表转换为一个对象,此方法和Object。entries()相对的(逆操作)
  letarr〔〔a,1〕,〔b,2〕〕;
  letobjObject。fromEntries(arr);
  console。log(obj);{a:1,b:2}
  Map转Object
  letmapObjnewMap();
  mapObj。set(name,leo);
  mapObj。set(age,18);
  console。log(map);{nameleo,age18}
  letnewObjObject。fromEntries(mapObj);
  console。log(newObj);{name:leo,age:18}
  12、Array。prototype。flat()
  语法
  letnewArrarr。flat(〔depth〕);depth可选,指提取嵌套数组的结构深度,默认值为1。
  flat()会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回(数组扁平化)
  letarr1〔0,1,2,〔3,4〕〕;
  console。log(arr1。flat());〔0,1,2,3,4〕
  letarr2〔0,1,2,〔〔〔3,4〕〕〕〕;
  console。log(arr2。flat(2));〔0,1,2,〔3,4〕〕
  console。log(arr2。flat(3));〔0,1,2,3,4〕
  使用Infinity,可展开任意深度的嵌套数组
  letarr3〔1,2,〔3,4,〔5,6,〔7,8,〔9,10〕〕〕〕〕;
  arr3。flat(Infinity);〔1,2,3,4,5,6,7,8,9,10〕
  flat()方法会移除数组中的空项
  letarr5〔1,2,,,4,5〕;
  arr5。flat();〔1,2,4,5〕
  13、Array。prototype。flatMap()
  flatMap()首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。顾名思义,它包含两部分功能一个是map,一个是flat(深度为1)
  语法
  letnewArrarr。flatMap(functioncallback(currentValue〔,index〔,array〕〕){
  返回新数组的元素
  }〔,thisArg〕);
  currentValue,当前正在数组中处理的元素
  index可选,数组中正在处理的当前元素的索引
  array可选,被调用的map数组
  thisArg,执行callback函数时使用的this值
  举例
  letnumbers〔1,2,3〕;
  numbers。map(x〔x2〕);〔〔2〕,〔4〕,〔6〕〕
  numbers。flatMap(x〔x2〕);〔2,4,6〕
  flatMap()与map()和深度depth为1的flat()几乎相同
  letarr〔leo,,早上好〕
  arr。map(ss。split());〔〔l,e,o〕,〔〕,〔早,上,好〕〕
  arr。flatMap(ss。split());〔l,e,o,,早,上,好〕
  14、String。prototype。trimStart()
  trimStart()从字符串的开头删除空格,trimLeft()是它的别名
  
  console。log(str。length);6
  strstr。trimStart();或str。trimLeft()
  console。log(str。length);3
  15、String。prototype。trimEnd()
  trimEnd()从一个字符串的末尾删除空格,trimRight()是它的别名
  
  console。log(str。length);6
  strstr。trimEnd();或str。trimRight()
  console。log(str。length);3
  16、空值合并运算符??
  空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为null或者undefined时,返回其右侧操作数,否则返回左侧操作数
  letnameundefined??leo
  letagenull??18
  console。log(name);leo
  console。log(age);18
  与逻辑或操作符()不同,会在左侧操作数为假值(例如、0、NaN、false、undefined、null)时返回右侧操作数
  letname1??
  letname2
  console。log(name1);
  console。log(name2);lion
  letage10??18;
  letage2018;
  console。log(age1);0
  console。log(age2);18
  17、可选链?。
  可选链操作符(?。)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?。操作符的功能类似于。链式操作符,不同之处在于,在引用为null或者undefined的情况下不会引起错误,该表达式短路返回值是undefined。与函数调用一起使用时,如果给定的函数不存在,则返回undefined。
  当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明
  举例
  letobj{
  message:{
  name:leo,
  sayHi(){
  
  }
  }
  }
  在之前的语法中,想获取到深层属性或方法,不得不做前置校验,否则很容易命中UncaughtTypeError:Cannotreadproperty。。。这种错误,影响整个程序的运行
  letnameobjobj。messageobj。message。
  console。log(name);leo
  使用可选链操作符(?。)
  letnameobj?。message?。
  console。log(name);leo
  可选链中的?表示如果问号左边表达式有值,就会继续查询问号后面的字段。
  注意:可选链不能用于赋值
  letobj{};
  obj?。message?。报错
  18、String。prototype。matchAll()
  matchAll()返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
  letregexpt(e)(st(d?))g;
  letstrtest1test2;
  letarr〔。。。str。matchAll(regexp)〕;返回所有匹配上的
  console。log(array〔0〕);〔test1,e,st1,1〕
  console。log(array〔1〕);〔test2,e,st2,2〕
  19、Promise。allSettled()
  已知Promise。all()具有并发执行异步任务的能力。但它的最大问题就是如果其中某个任务出现异常(reject),所有任务都会挂掉,且直接进入reject状态。
  如页面上有三个请求,分别请求不同的数据,如果使用Promise。all(),一个接口服务异常,整个都是失败的,都无法渲染出数据。
  我们想要在并发任务中,无论一个任务正常或者异常,都会返回对应的的状态,则可以使用Promise。allSettled()。
  letpromise1(){
  returnnewPromise((resolve,reject){
  setTimeout((){
  resolve(promise1);
  },3000);
  });
  };
  letpromise2(){
  returnnewPromise((resolve,reject){
  setTimeout((){
  resolve(promise2);
  },1000);
  });
  };
  letpromise3(){
  returnnewPromise((resolve,reject){
  setTimeout((){
  reject(errorpromise3);
  },2000);
  });
  };
  使用Promise。all,则会走到catch里面,因为promise3是reject
  Promise。all(〔promise1(),promise2(),promise3()〕)
  。then((res){
  console。log(res);
  })
  。catch((error){
  console。log(error,error);errorpromise3
  });
  使用Promise。allSettled,不管有没有错误,三个状态都会返回,不会走到catch
  Promise。allSettled(〔promise1(),promise2(),promise3()〕)
  。then((res){
  console。log(res);
  〔
  {status:fulfilled,value:promise1},
  {status:fulfilled,value:promise2},
  {status:rejected,reason:errorpromise3}
  〕
  })
  。catch((error){
  console。log(error,error);
  });
  20、String。prototype。replaceAll()
  replaceAll()返回一个新字符串,新字符串中所有满足pattern的部分都会被替换。pattern可以是一个字符串或一个正则表达式
  letstraabbcc。replaceAll(b,);
  console。log(str);aacc
  使用正则表达式搜索值时,它必须是全局的
  aabbcc。replaceAll(b,);报错
  修改如下
  aabbcc。replaceAll(bg,);aacc
投诉 评论 转载

老牌国产手机正式回归,率先和华为达成合作,第3家接入华为生态最近,一家老牌国产手机正式宣布回归,并且在回归时,就发布了自己的一款手机。值得注意的是,这家国产手机已经率先与华为达成合作,并且成为第3家接入华为生态的国产品牌。那么,它是否会……音乐会舞台摄影调色LR预设今天为大家分享的是音乐会舞台摄影调色lr预设,内含多种不同风格类型的Lightroom预设,包括lr黑白预设,lr暖色调预设,lr电影预设等,每个预设都经过精心设计,只需点击一……乘联会12月比亚迪新能源车批发销量93338辆特斯拉中国70e公司讯,乘联会数据显示,12月新能源乘用车市场多元化发力,厂商批发销量突破万辆的企业有14家,较前期大幅增多,其中:比亚迪93338辆、特斯拉中国70847辆、上汽通用五菱6……20个JavaScript技术善于利用,可提升自己的开发效率1、Array。prototype。includes()includes()方法用来判断一个数组中是否包含某个指定的值,包含则返回true,否则返回false。语法……魅族满脸生草!小米11Ultra这造型真不是致敬?小米11ultra之前小米11很明显是留着相当大的余量,明眼人一眼就看出来小米11在镜头上还有很大的提升空间,好听了说是憋大招,难听了说就是疯狂划水。虽然说主镜头有1亿像素,但……SpringMVC文件下载顾名思义,文件下载就是将服务器中的文件下载到本地,下面主要介绍SpringMVC文件下载的实现方法和实现过程。文件下载的实现方法文件下载有以下两种实现方法:通……全能的多面利器,尼康Z6帮你把生活拍成电影有人抱怨生活总是单调无味,羡慕别人把日子过成了诗;有人赞叹生活处处是美好,把经历的故事拍成了电影。生活本是无味的,但我们可以选择诗意地栖息,将生活过得有滋有味。记录属于你的生活……真正拉低智能手机价格的是谁?这个问题的答案我相信在每个人的心中都是统一的,这个人自然就是雷军。在很多年前,雷军接受采访的时候就说过一段话,大概的意思就是,老百姓买东西,一直都有一个认知,便宜没好货,……华铁应急否认三宗罪指控遭亿邦科技实名举报后,华铁应急被推上风口浪尖,双方的对抗也愈加激烈。8月9日晚间,华铁应急紧急召开媒体说明会,对于8月8日亿邦科技董事长胡东实名举报的三项指控一一否认。同……英伟达发布会上的老黄居然不是真人AI渲染的?在今天的计算机图形学顶会SIGGRAPH2021上,NVIDIA官方曝出了一条猛料,今年4月我们在英伟达举办的GPU技术大会上看到的黄仁勋居然是假的。如果关注PC硬件或半……赛力斯华为智选SF5新能源汽车的首选用车近年来,高端新能源汽车一直深受市场瞩目,并且也有越来越多的人开始选择新能源,因此新能源也领来了良好的发展态势,特别是在赛力斯华为智选SF5推出之后,加快了新能源汽车市场的发展。……浅谈高校毕业生就业网站发展与创新研究论文【论文关键词】高校毕业生就业网站求职招聘就业短信就业微博【论文摘要】网络改变了人们的生活,也引发了人们思想观念的变革。自2003年6月13日中国高校毕业生就业服务信息网正……
仙剑奇侠传七发布1。0。6更新修复角色等级为零等Bug,解决如何将手机位置设置成女朋友家楼下?哈哈哈哈哈,开启作死之旅仙剑奇侠传七部分玩家遇到安装问题,官方公布解决办法英伟达GeForceNow云游戏服务已支持苹果M1MacAPEX英雄凭什么让大家重新爱上吃鸡?庆祝星战日,EA为OriginAccess增添12款经典星球EA修复Origin客户端漏洞黑客可远程运行恶意代码高通升级产品路线图,推出骁龙778G骁龙695骁龙480骁龙月收入9200万美元,APEX英雄成上线首月收入最高免费游戏EA表示模拟人生4将于六月份停止支持32位平台Apex英雄外挂严重逼疯老外,官方疑似锁区小米魅族苹果,谁家的悬浮球最好用?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形