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

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插件来支持。不知道你都用过哪些?

剩菜要等凉了再放进冰箱?这4种菜宁愿扔掉,也别隔夜吃生活中较节俭的人大多不会浪费食物,吃不完的东西会放到冰箱保鲜,隔天加热后再吃,觉得味道没有什么差异,长时间有这种行为好像也没有肠胃不良反应,因此觉得是安全,健康的。究竟哪些剩菜不能寒露美图心语,寒露洁空,气冷疑晚,添衣穿鞋,深秋吉祥安康寒露美图心语,寒露洁空,气冷疑晚,添衣穿鞋,深秋吉祥安康!秋日生活打卡季守护银龄世界秋天秋景秋赏多事之秋的秋季,气温说变就变。人们把燥热难耐的初秋称之为秋老虎,一点也不过份。而到了寒露将至,谨记2不吃3不露3要喝,顺应时节气色好寒露,是秋季倒数第二个节气。当寒露到来后,也说明冬季就快到了,此时昼夜温差大,此时为了我们的健康,在生活方面大家应注意,牢记2不吃3不露3要喝,顺应时节,养好身体。2不吃1不吃辣椒明日寒露,天寒女人更要懂得忌口,多吃5碱少吃3酸,身轻火气消清香晨风远,溽彩寒露浓,秋日的景色本就动人,寒露到来之后更是添上了几分凄美。连下的几场秋雨,让寒意越来越浓,丝毫不愧对寒露这一时节的名字,但这猛然而至的秋寒加上还未消散的秋燥,对于80年前的静电之谜终于解开了在接触电荷电介质上充电马赛克。(a)在传统观点中,两种电中性材料(gra)接触,然后均匀地分离电荷(左下角),一种是正极(红色),另一种是负电荷(蓝色)。在另一种情况下(右下角),梅西谈儿子们蒂亚戈很冷静,马特奥像我讨厌输球,西罗喜欢模仿2哥10月7日消息,日前,巴黎圣日耳曼前锋梅西接受了ESPN专访,谈到了自己的家庭和三个儿子。梅西和妻子安东内拉一共生育了3个儿子,大儿子蒂亚戈9岁,二儿子马特奥7岁,三儿子西罗4岁。乒乓中瑞之战10月7日晚,成都世乒赛中瑞乒乓男队之战可谓乒乓盛宴之经典对决。瑞典乒乓球男队算得上乒坛劲旅,多次夺得个人和团体冠军,唯一一个除了中国之外的大满贯,世界第一个大满贯瓦尔德内尔就是瑞WSBK2022西班牙加泰罗尼亚站WorldSBK世界超级摩托车锦标赛2022赛季第八个分站的比赛,九月2325日在西班牙的加泰罗尼亚(Catalunya)赛车场举行。加泰罗尼亚赛道全长4657米,有14个弯道(左霍华德自爆自己正在考虑从NBA退役,也许会转投WWE摔角联盟霍华德亲承正考虑退役德怀特霍华德,曾经的NBA第一中锋,征战NBA18载的37岁老将,近日载播客节目中透露自己正在考虑从NBA退役。我想打球,但同时也没有球队真的想让我打球,这就是意甲联盟送喜讯!27岁的朱婷即将亮相,蔡斌等到了,女排即将崛起今天是北京时间的十月七号。众所周知,目前我们女排的世锦赛已经进行到了第二阶段。我们目前女排第一阶段的比赛是四胜一负的成绩,也是打出了非常亮眼的表现,也是让很多的球迷对于我们中国女排CBA三消息广州双雄伤停半年,张宁升级成核心,威姆斯的确下滑大家好呀,我是北柠,各位小伙伴们要养成先赞后看的习惯哦!广州队是现在CBA联赛里中游水平的一支球队,他们最近几个赛季一直都在进步,这让球迷们产生了一定的错觉,目前很多人都把广州队当
赛场外的乱象莫让世界杯,变为世界悲头条创作挑战赛继双十一过后,11月25日,黑色星期五购物狂欢节席卷而来,再次掀起一股消费浪潮。作为发源于美国的大型消费节日,其盛况不亚于中国的618和双十一。尤其在世界杯期间,撞上苏宁易购海尔合作升级,2023年目标200亿临近年末,家电行业开启新一轮战略合作规划。11月24日,苏宁易购与海尔召开年度战略对接会,双方在总结2022年合作基础上明确2023年战略合作目标及路径,同步针对年底营销旺季举行了10个生活习惯,遇见更好的自己当一个人想成为更好的自己,最直接的办法,就是从习惯上着手。1自主独立。很多事情能够自己解决的先不要找别人帮忙,很多信息能够自己百度的先不要找别人询问,养成独立的习惯。靠谁都不如靠自活着,究竟是为了什么?曾读到一段金句人生漫长,晴雨交加,但若是心怀热爱,即使岁月荒芜,亦能奔山赴海,静待一树花开。人生就像一条路,婉延曲折生活更像一杯酒,辣喉冲胃。但热爱生活的人,都会品尝出人生无尽的美退休了让自己负责体检昨天刷头条,看到有一个帖子退休了,没有人安排体检了!虽然一句平淡无奇的话,却能品味出一种深深的失落和悲凉。有入职就有退休,年龄到了,工作几十年,青春精力付出年华都要画一个句号,这份书评一本书写清人生烦恼的根源,以及怎样活出自在生活中,我们每天要为衣食住行奔波工作上,我们经常会为各种deadline绞尽脑汁复杂快节奏的生活,需要我们不停地跟各式各样的人和事打交道。于是乎,一些不合心意的事,不少不对胃口的人武功山!一个听名字就想要去的地方,必定不会让你失望的徒步路线秋天到了,适合散步骑行露营划船徒步陆地冲浪,因为这才是秋天周末的正确打开方式。约上自己的好姐妹说出发就出发!这里的景色真的太美了!上午就到了武功山金顶的帐篷点,沿途登山的风景真的很互联网思维的一百种死法用互联网思维把每个行业都重做一遍的努力,多数以失败收场,主要原因可以归结为八大迷思图视觉中国文财经记者余乐编辑谢丽容几年前,我和一家即时配送公司的公关经理见面。当我说起我们很关注物你缺的不是努力,而是选择正确方向的能力在你身边总会有一些人,只要你看见他的时候,他总是在忙,天天如此。但当检验成果的时候,往往结果不尽人如意,这类人就像龙哥书里写的你只是看起起来很努力而这种人在我们周围占比还不少。01懂了现金为王的道理,才能实现财富自由视频加载中节选CMF直播课分享讲师王辰我们都会讲一句话叫现金为王,如果你真的懂了现金为王你才能实现财富自由,其实现金为王的本质含义应该是现金流为王就在你最极难的时候最关键时刻你有多敲黑板划重点!35姐妹用的护肤品的抗老密码温和不刺激我们去买护肤品是不是经常被柜姐或者老板忽忽悠悠的就买了成套成盒捆绑销售的高额护肤产品,买回家之后能够实际使用的也只有一两瓶,其他的和自己肤质不匹配的都就限制了,更有甚者搞不清自己的