17611538698
webmaster@21cto.com

来尝尝JavaScript 2021的新功能!

资讯 0 2801 2021-05-26 08:51:37
<p><img alt="" src="https://www.21cto.com/uploads/images/what-javascript-framework-to-choose-in-2021.jpeg" style="width: 100%; height: 100%;" />导读:今天,我们将讨论一些有用的JavasScript新功能,这些新功能可以通过减少代码量,帮助开发者实现更多目标。<br /> JavaScript是一种易于学习的编程语言,它非常适合初学者。多年来,它已经发展到几乎无处不在的程度。</p> <p>人们已经在前端(React,Angular或Vue.js),后端(Node.js),使用Electron.JS创建桌面应用程序等等发现它的影子。</p> <p>JavaScript在2021年又发布了一些新功能,可以在更多方面为开发人员提供助益。</p> <p>2021年JavaScript的一些新功能,我们来总结如下:</p> <p><br /> 1)新的逻辑运算符</p> <p><br /> JavaScript在现有集合中添加了3个新的逻辑运算符。这3个运算符分别是</p> <p>&amp;&amp;=,||=和??=。</p> <p>我们来详细讨论这些运算符:</p> <p>a)&amp;&amp;=运算符</p> <p>在深入解释之前,来看下面的示例代码:</p> <p>let a = 1;<br /> let b = 2;<br /> a &amp;&amp;= b;<br /> console.log(a) // 输入的变量 &#39;a&#39; 的值将为 2.<br /> a&amp;&amp;= b相当于下面的代码:</p> <p>if(a){&nbsp;<br /> &nbsp; a = b;&nbsp;<br /> }<br /> 该逻辑运算符表示,如果变量a是真值(因为它具有非零值,那么它就为真值),则a应为变量分配变量的值b。</p> <p>因此运行console.log(a)时,变量的值a等于2而不是1。</p> <p>b)||=运算符</p> <p>来看以下代码块:</p> <p>let a = 1;<br /> let b = 2;<br /> a ||= b;<br /> console.log(b); // 变量&ldquo;a&rdquo;的结果为 1.</p> <p>该运算符与&amp;&amp;=运算符的结果相反。</p> <p>在这种情况下,仅当变量a不为真值时,变量b才等于变量a。上面的代码块等效于以下的代码:</p> <p><br /> if (!a) {<br /> &nbsp; a = b;<br /> }</p> <p>c)??=运算符</p> <p>此运算符检查值是否为null或未定义。考虑以下示例:</p> <p>let a;<br /> let b = 2;<br /> a ??= 1;<br /> console.log(a) // 输出变量 &#39;a&#39; 的值为 1.<br /> // 以下代码类似于以上实例.<br /> // if(a === null || a === undefined) {<br /> // &nbsp; a = 1<br /> // }</p> <p>在以上的示例中,变量&ldquo; a&rdquo;的值计算为未定义,因此if条件表达式的计算&ldquo;a&rdquo;表达式的结果为true,并且将&ldquo; a&rdquo;分配值为1。</p> <p>2)字符串&#39;replaceAll&#39;方法</p> <p><br /> 很多人都用replace方法将字符串中的字符或单词替换为指定的元素。但是它有一个局限性,该方法仅替换了我们要替换的字符或单词的第一个匹配项,而其余匹配项则保持不变。要替换所有字符或单词,我们必须使用正则表达式。</p> <p>例子:</p> <p>// without regex<br /> let str = &#39;JS is everywhere. JS is amazing!&#39;;<br /> console.log(str.replace(&#39;JS&#39;, &#39;JavaScript&#39;)); // the output would be &#39;JavaScript is everywhere. JS is amazing!&#39;<br /> // with regex<br /> let str = &#39;JS is everywhere. JS is amazing!&#39;;<br /> console.log(str.replace(/JS/g, &#39;JavaScript&#39;)); // the output would be &#39;JavaScript is everywhere. JavaScript is amazing!&#39;.<br /> 使用该replaceAll方法,可以移除正则表达式。来看下面的代码:</p> <p>let str = &#39;JS is everywhere. JS is amazing!&#39;;<br /> console.log(str.replaceAll(&#39;JS&#39;, &#39;JavaScript&#39;)); // the output would be &#39;JavaScript is everywhere. JavaScript is amazing!&#39;.<br /> replaceAll方法可用指定的元素替换所有出现的指定字符或单词。</p> <p>3)使用下划线作为整数的分隔符</p> <p><br /> 整数是字符串,数组等中的数据类型之一。有时候数值会变得很大,几乎很难计算出存在的元素数或弄清楚该数字是一百万还是十个亿。</p> <p>通过引入下划线功能,可以提高整数的可读性。人们可以使用下划线将数字分开,而无需将数据类型转换为字符串。如下代码示例:</p> <p>let number = 1_000_000_000; // one billion<br /> console.log(number) // 1000000000 (the number would remain an integer)</p> <p>4)Promise.any()</p> <p><br /> 如果你不知道promises在JavaScript表示什么,那么应该首先阅读以下文字。</p> <p>Promise.any()是一项新功能,它是一个多个可迭代的Promise,并返回最先实现的Promise。以下示例可清楚地说明这一点:</p> <p><br /> const p1 = new Promise(resolve =&gt; setTimeout(resolve, 500, &#39;First&#39;));<br /> const p2 = new Promise(resolve =&gt; setTimeout(resolve, 800, &#39;Second&#39;));<br /> const p3 = Promsie.reject(1);<br /> const promises = [p1, p2, p3];<br /> Promise.any(promises)<br /> .then(result =&gt; {<br /> &nbsp; &nbsp;console.log(result);<br /> }) // the result would be &#39;First&#39; because that&#39;s the promise, that is fulfilled first.<br /> .catch(e =&gt; {<br /> &nbsp; &nbsp; console.log(e);<br /> })</p> <p>万一所有promise都没有兑现,那么我们将得到一个AggregateError。要处理AggregateError,我们可以在catch语句之后定义一条then语句。</p> <p>5)WeakRef和Finalizers</p> <p><br /> WeakRef是&ldquo;弱引用&rdquo;的缩写。WeakRef允许持有对象的弱引用。所保持的弱引用称为&ldquo;目标&rdquo;,弱引用不会阻止垃圾回收器回收对象。</p> <p>(垃圾收集是一种收集不再需要的变量的方法,可以释放计算机内存。)</p> <p>注意:WeakRef仅应在进行了适当的调整后使用,并应尽可能避免使用。</p> <p>让我们通过一个例子来理解以下内容:</p> <p>const weakRefFunc =()=&gt; {&nbsp;<br /> &nbsp; &nbsp; const obj = new WeakRef({&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;name:&#39;JavaScript&#39;&nbsp;<br /> &nbsp; &nbsp; });&nbsp;<br /> &nbsp; &nbsp; console.log(obj.deref()。name);&nbsp;<br /> }&nbsp;<br /> const test =()=&gt; {&nbsp;<br /> &nbsp; &nbsp; new Promise(resolve =&gt; {&nbsp;<br /> &nbsp; &nbsp; &nbsp;setTimeout(()=&gt; {&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;weakRefFunc();&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; resolve();&nbsp;<br /> &nbsp; &nbsp; &nbsp; },3000)<br /> &nbsp; &nbsp; })<br /> &nbsp; &nbsp; new Promise(resolve =&gt; {&nbsp;<br /> &nbsp; &nbsp; &nbsp;setTimeout(()=&gt; {&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;weakRefFunc();&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; resolve();&nbsp;<br /> &nbsp; &nbsp; &nbsp; },5000)<br /> &nbsp; &nbsp; })<br /> }&nbsp;<br /> test();</p> <p>该deref方法返回被保留的目标,如果目标是垃圾回收,则返回undefined。</p> <p>在此示例中,变量obj是要保留的弱引用。</p> <p>第一次在函数weakrefFunc内部test调用时,保证会打印&#39;JavaScript&#39;,但是第二次调用时,不能保证会打印&#39;JavaScript&#39;,因为变量obj可能被垃圾回收。它被认为是弱引用。</p> <p>Finalizers</p> <p><br /> Finalizers 通常与WeakRef一起联合使用,但是WeakRef可以单独使用。Finalizers用来告诉解释引擎何时同对象进行垃圾回收。让我们来用一个例子来理解这一点:</p> <p>首先,使用FinalizationRegistry方法创建一个Finalizers。</p> <p>const registerFinalizer = new FinalizationRegistry(data =&gt; console.log(data));<br /> const obj = {&#39;name&#39;: &#39;JavaScript&#39;};<br /> registerFinalizer.register(obj, &#39;obj is collected now!&#39;)</p> <p><br /> 那么现在,变量registerFinalizer是一个对象,其中包含register是我们将要使用的方法。registerFinalizer.register需要2个参数。首先是要监视对象的垃圾回收,其次是当对象被垃圾回收时要在控制台上显示的消息。</p> <p>当变量obj由垃圾收集器收集时,会显示一条消息,显示对象被收集,打印在控制台。</p> <p>结论</p> <p><br /> 总体上,JavaScript是一种令人兴奋的学习语言,主要原因之一是它已经无处不在。我在工作发现上面讨论的这些新功能非常有用。</p> <p>JavaScript 2021的功能非常出色,希望明年能够发布并实现,各位不妨一试哦。</p> <p>作者:万能的大雄</p>

评论