范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

10个JS小技巧,你知道几个?

  前言
  你知道  0 ?? 1  等于多少吗?
  大家好,我是  LBJ  ,今天我们聊聊2022  一些值得掌握的新特性!
  现在前端发展很快,各种技术和框架层出不穷、百花齐放,很多人都喊学不动啦!事实上 JavaScript   作为前端的主要语言,虽然它的发展很快,每年都会出一些新特性,但视乎 JavaScript   开发者的发展速度更快一些,因为很多相对较新的功能都已经有很高的采用率
  下面来看看那些具有较高采用率的新特性, 2022  你应该了解的10  个 JS   小技巧,看完就可以立马用上。1. 用??代替||,用于判断运算符左侧的值为null或undefined时,才返回右侧的值
  ??  运算符是 ES2020   引入,也被称为null  判断运算符( Nullish coalescing operator)
  它的行为类似 ||  ,但是更严
  ||  运算符是左边是空字符串或false  或0  等falsy值 ,都会返回后侧的值。而??  必须运算符左侧的值为null  或undefined  时,才会返回右侧的值。因此0||1的结果为1,0??1的结果为0
  例如 const response = {   settings: {     nullValue: null,     height: 400,     animationDuration: 0,     headerText: "",     showSplashScreen: false   } };  const undefinedValue = response.settings.undefinedValue ?? "some other default"; // result: "some other default" const nullValue = response.settings.nullValue ?? "some other default"; // result: "some other default" const headerText = response.settings.headerText ?? "Hello, world!"; // result: "" const animationDuration = response.settings.animationDuration ?? 300; // result: 0 const showSplashScreen = response.settings.showSplashScreen ?? true; // result: false
  兼容性情况2. 使用?.简化&&和三元运算符
  ?.  也是ES2020 引入,有人称为链判断运算符(optional chaining operator)
  ?.  直接在链式调用的时候判断,判断左侧的对象是否为null  或undefined  ,如果是的,就不再往下运算,返回undefined,如果不是,则返回右侧的值。例如: var street = user.address && user.address.street;  var fooInput = myForm.querySelector("input[name=foo]") var fooValue = fooInput ? fooInput.value : undefined  // 简化 var street = user.address?.street var fooValue = myForm.querySelector("input[name=foo]")?.value
  注:常见写法 obj?.prop   对象属性obj?.[expr]   对象属性func?.(...args)   函数或对象方法的调用
  兼容性情况3. 使用动态导入import()实现按需加载(优化静态import)
  我们可以使用  import   语句初始化的加载依赖项 import defaultExport from "module-name"; import * as name from "module-name";
  但是静态引入的 import   语句需要依赖于 type="module"   的script  标签,而且有的时候我们希望可以根据条件来按需加载模块,比如以下场景:当静态导入的模块很明显的降低了代码的加载速度且被使用的可能性很低,或者并不需要马上使用它 当静态导入的模块很明显的占用了大量系统内存且被使用的可能性很低 当被导入的模块,在加载时并不存在,需要异步获取 当被导入的模块有副作用,这些副作用只有在触发了某些条件才被需要时
  这个时候我们就可以使用动态引入 import()  ,它跟函数一样可以用于各种地方,返回的是一个 promise   基本使用如下两种形式 //形式 1 import("/modules/my-module.js")   .then((module) => {     // Do something with the module.   });     //形式2 let module = await import("/modules/my-module.js");
  兼容性情况4. 使用顶层 await(top-level await)简化 async 函数
  其实上面的代码就有用到 let module = await import("/modules/my-module.js");
  顶层  await   允许开发者在  async   函数外部使用  await   字段 //以前 (async function () {   await Promise.resolve(console.log(""));   // →  })();  //简化后 await Promise.resolve(console.log(""));
  兼容性情况5. 使用String.prototype.replaceAll()简化replace一次性替换所有子字符串
  String.prototype.replaceAll()  用法与String.prototype.replace()  类似
  但是 replace  仅替换第一次出现的子字符串,而replaceAll  会替换所有
  例如需要替换所有a为A: // 以前 console.log("aaa".replace(/a/g,"A")) //AAA  // 简化后 console.log("aaa".replaceAll("a","A")) //AAA
  兼容性情况6. 使用Proxy替代Object.defineProperty
  为什么使用  Proxy   替代 Object.defineProperty  ,简单总结Proxy  的几点优势Proxy 是对整个对象的代理,而 Object.defineProperty 只能代理某个属性 对象上新增属性,Proxy 可以监听到,Object.defineProperty 不能 数组新增修改,Proxy 可以监听到,Object.defineProperty 不能 若对象内部属性要全部递归代理,Proxy 可以只在调用的时候递归,而 Object.definePropery 需要一次完成所有递归,性能比 Proxy 差
  使用也很简单, Proxy  本质是构造函数,通过new即可产生对象,它接收两个参数:target  表示的就是要拦截(代理)的目标对象handler  是用来定制拦截行为(13种 )
  例如响应式 reactive  的基本实现:function reactive(obj) {     return new Proxy(obj, {         get(target, key) {             // 可以做依赖收集             track(target, key)             return target[key]         },         set(target, key, val) {             target[key] = val             // 触发依赖             trigger(target, key)         }     }) }
  兼容性情况7. Promise.any快速获取一组Promise实例中第一个fulfilled的promise
  Promise.any   接收一组Promise  实例作为参数只要其中的一个  promise   成功,就返回那个已经成功的 promise  如果这组可迭代对象中,没有一个  promise   成功,就返回一个失败的 promise   和 AggregateError   类型的实例。写法推荐: try {   const first = await Promise.any(promises);   // Any of the promises was fulfilled. } catch (error) {   // All of the promises were rejected. }  // 或者  Promise.any(promises).then(   (first) => {     // Any of the promises was fulfilled.   },   (error) => {     // All of the promises were rejected.   } );
  兼容性情况8. 使用BigInt支持大整数计算问题
  ES2020 [1]  引入了一种新的数据类型 BigInt,用来表示任意位数的整数 // 超过 53 个二进制位的数值(相当于 16 个十进制位),无法保持精度 Math.pow(2, 53) === Math.pow(2, 53) + 1 // true  // BigInt BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53)) + BigInt(1) // false
  除了使用BigInt来声明一个大整数,还可以使用数字后面加n的形式,如 1234 // 普通整数 1234n // BigInt
  需要了解BigInt数字操作时的支持情况,以免踩坑
  兼容性情况9. 使用Array.prototype.at()简化arr.length
  Array.prototype.at()  接收一个正整数或者负整数作为参数,表示获取指定位置的成员
  参数正数就表示顺数第几个,负数表示倒数第几个,这可以很方便的某个数组末尾的元素
  例如: var arr = [1, 2, 3, 4, 5] // 以前获取最后一位 console.log(arr[arr.length-1]) //5 // 简化后 console.log(arr.at(-1)) // 510. 使用哈希前缀#将类字段设为私有
  在类中通过哈希前缀 #  标记的字段都将被私有,子类实例将无法继承
  例如 class ClassWithPrivateField {     #privateField;     #privateMethod() {         return "hello world";     }     constructor() {         this.#privateField = 42;     } }  const instance = new ClassWithPrivateField() console.log(instance.privateField); //undefined console.log(instance.privateMethod); //undefined
  可以看到,属性 privateField  和方法 privateMethod  都被私有化了,在实例中无法获取到
  很多新特性都有很多人在用了,特别是 ??  和 ?.  以及动态引入 import()  ,在如vue框架中还需要babel插件来支持。不知道你都用过哪些?

那不勒斯VS尤文图斯那不勒斯是意大利的超级球队,他们在这个赛季的表现非常好,他们在联赛中也是数一数二的强队。那不勒斯的得分能力很强,最近19场比赛都是平局,这是一个不错的成绩。那不勒斯在主场的表现依然喜讯冲刺收官!福建省第十七届运动会武夷山获9。5金7。5银6。5铜随着福建省第十七届运动会的顺利闭幕,武夷山市圆满完成金牌任务,获得竞赛金牌9。5枚,带入金牌8枚,总金牌数17。5枚,武夷山市文化体育和旅游局被授予备战参赛优秀奖荣誉称号。本届省运里弗斯也许该对亚历山大上包夹,但他能把握一切机会今天76人114133不敌雷霆。赛后,76人主帅道格里弗斯接受了记者的采访。本场比赛,雷霆球员吉尔杰斯亚历山大出战34分钟,16投10中,其中三分球1投1中,罚球16投16中,得到米切尔我都有点习惯利拉德拿高分了,我们防守做得很好骑士以119113战胜开拓者。本场比赛,骑士球员多诺万米切尔出战35分钟,23投11中,其中三分球8投2中,罚球4投2中,得到26分5篮板5助攻2抢断。谈到开拓者控卫达米安利拉德拿阿伦卢比奥是个很好的人,他复出大家都很高兴骑士以119113战胜开拓者。本场比赛,骑士球员贾勒特阿伦出战38分钟,17投11中,其中三分球1投0中,罚球2投2中,得到24分10篮板6助攻1抢断。谈到队友里基卢比奥复出,阿伦勇士爆冷惨败!奇兵14罚14中弑旧主,小将爆发,库里狂投15个三分没想到啊,西部第六的勇士面对西部第八太阳,最近遭遇6连败的太阳队,这场比赛遭遇重创,他们的当家后卫保罗和中锋艾顿也打不了了。所以,这场比赛,他们是用一套绝对意义上的残阵来迎战,保罗女儿将来成为女神还是卑女,父亲的态度至关重要众所周知,林徽因是清华大学教授,是中国第一位女建筑家,而且长相俊美,气质若兰,妥妥的才女加女神。更令人感慨和钦佩的是她极其清醒和理智的择偶观。她十七岁时断然拒绝了著名诗人徐志摩的追3名儿童死亡,广西平果17火灾原因查明!2023年1月7日12时53分广西百色平果市一民房四楼卧室发生火灾共造成3人死亡经初步调查火灾系小孩玩火所致目前善后工作正在进行中据悉,事发当天大人有事出门反锁了房门只留了3个孩子勇者无泪,强者无惧!2023,强起来!2022年,还有十来个小时就和我们说再见了,光阴似箭啊。回望这一年,多少欣喜,多少期待,多少无奈,都将成为过去。逝者不可追,来者需把握!告别2022,期盼2023!我们可以自我安慰不同国家对待中国游客的态度,日本韩国让人气愤,泰国这局赢麻了随着疫情放开,憋了三年终于可以出去旅游了,世界各国也纷纷对中国人民发出邀请,越来越多的人选择出国旅游,大部分选择了东南亚国家,日本韩国也在入选之列,要说这两天最热门的话题,那就是不新春嗨不停!2023春节烟台文旅活动惊喜上线!胶东在线1月13日讯(记者赵竹建)1月21日(下周六),我们即将迎来一年一度的除夕之夜。春节期间,烟台市文化和旅游局将以卯兔迎新春烟台过大年为主题,推出赶黄河大集品风物年俗卯兔喜气
肠癌的外在表现是肚子疼吗?具体是哪个部位?现在有什么治疗手段?肠癌是一个统称,人体有大肠有小肠,但小肠癌很少发生,人们所称的肠癌一般指大肠癌,包括结肠癌和直肠癌。肠癌肚子哪个部位疼呢?当癌细胞侵犯到肠壁肌层时或转移到周围组织时会出现腹痛,大部问富裕的亲戚借十万买房,亲戚说没钱,只有五千送我,说不用还,是什么意思?向亲戚借钱,你开口借十万,而亲戚说没有,却送五千给你,说不用你还了。说真的,如果是我,那送的五千也不会要的。干脆不欠他的情,所以说,做人要有自知之明。可能你并不明白,你亲戚的意思,中国北斗卫星定位系统在我国已经逐渐完善,以后资费方面能不能做到像使用GPS一样基本免费?北斗系统与GPS相比,除了具备相同的无源RNSS定位能力,还多了一种有源RDSS定位方式。对于RNSS定位方式而言,北斗与GPS是一样的免费为大众服务,空间信号接口控制文件是完全公辞去月薪3000的国企正式工,去新成立的中国人寿财险公司支公司上班,好不好?你好!中国人寿财产保险股份有限公司是中国人寿保险(集团)旗下的公司。据我所知,财险是合同聘用制的,应该有正式的企业编制,毕竟是国企,但是名额相对来说肯定非常少,尤其是在一个分公司!云南哪个地段未来发展潜力最大?我是云南人,但不是德宏人。依我对云南省各地的了解,客观的讲,云南未来发展潜力最好的地段应该是德宏。德宏气候宜人,物产丰富,如果云南是一带一路面向南亚东南亚的桥头堡,那德宏就是桥头堡孕早期出血是怎么回事?怀孕初期出血是怎么回事怀孕初期出血可见于多种情况,如先兆性流产流产宫颈病变异位妊娠等。怀孕初期是指孕期的13个月,一些孕妇会在这期间发生阴道出血,其原因复杂,应引起重视,出现这种症没人找陈道明拍戏吗?没人找陈道明拍戏?怎么可能!是道明老师对作品的严苛要求,很难有好的剧本好的作品能入他的眼吧。1近十年,陈道明老师的作品都特别少,平均下来,连一年一部都没有。2010年,他主演了电视在dnf游戏中,挑战书已经成了白菜价,要是95版本开了还会暴涨吗?你怎么看?如今的dnf已经处于90版本末期,估计春节前后95版本就要登陆正式服了,可是现在的挑战书已经跌成白菜价,无人问津,那么有的玩家就有了疑问,要不要趁机屯一波,等着95版本暴涨呢?下面正宗的贺州打油茶是怎么做的?相信大家都喝过油茶吧这可是麒大宝从小到大的回忆但是大家知道吗?油茶可不只是好喝而已它还有一定的养生功效油茶的养生之道喝过油茶的人都知道,油茶讲究的是色香味。油茶的颜色有淡白金黄碧绿眩晕症是怎么引起的?大家好,我是一名从业多年的内科医生,说起眩晕症,以前我也只是在课本上学过,直到我自己工作后碰到一个典型的病例,令我印象深刻。刚毕业那会,,有一次出诊120,有个病人说晕的厉害,到达孙颖莎在新加坡拿冠军的几率大吗?莎莎已经进了四强,晚上大概率打败早田希娜进决赛,而上半区陈梦和王艺迪争决赛名额,如果陈梦胜利,莎莎会和陈梦争冠军,她俩的技术相差无几,莎莎有机会是冠军。WTT世界杯女单半决赛已经结