JavaScript:ES2019 的新特性(译)
作为最流行的编程语言和最重要的Web开发语言之一,JavaScript不断演变,每次迭代都会得到一些新的内部更新。让我们来看看ES2019有哪些新的特性,并加入到我们日常开发中:
Array.prototype.flat()
Array.prototype.flat()递归地将嵌套数组拼合到指定深度。默认值为1,如果要全深度则使用Infinity。此方法不会修改原始数组,但会创建一个新数组:
constarr1=[1,2,[3,4]]; arr1.flat(); //[1,2,3,4] constarr2=[1,2,[3,4,[5,6]]]; arr2.flat(2); //[1,2,3,4,5,6] constarr3=[1,2,[3,4,[5,6,[7,8]]]]; arr3.flat(Infinity); //[1,2,3,4,5,6,7,8]
flat()方法会移除数组中的空项:
constarr4=[1,2,,4,5]; arr4.flat();//[1,2,4,5]
Array.prototype.flatMap()
flatMap()方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与Array.prototype.map和深度值为1的Array.prototype.flat几乎相同,但flatMap通常在合并成一种方法的效率稍微高一些。
constarr1=[1,2,3]; arr1.map(x=>[x*4]); //[[4],[8],[12]] arr1.flatMap(x=>[x*4]); //[4,8,12]
更好的示例:
constsentence=["Thisisa","regular","sentence"]; sentence.map(x=>x.split("")); //[["This","is","a"],["regular"],["sentence"]] sentence.flatMap(x=>x.split("")); //["This","is","a","regular","sentence"] //可以使用归纳(reduce)与合并(concat)实现相同的功能 sentence.reduce((acc,x)=>acc.concat(x.split("")),[]);
String.prototype.trimStart()和String.prototype.trimEnd()
除了能从字符串两端删除空白字符的String.prototype.trim()之外,现在还有单独的方法,只能从每一端删除空格:
consttest="hello"; test.trim();//"hello"; test.trimStart();//"hello"; test.trimEnd();//"hello";
- trimStart():别名trimLeft(),移除原字符串左端的连续空白符并返回,并不会直接修改原字符串本身。
- trimEnd():别名trimRight(),移除原字符串右端的连续空白符并返回,并不会直接修改原字符串本身。
Object.fromEntries
将键值对列表转换为Object的新方法。
它与已有Object.entries()正好相反,Object.entries()方法在将对象转换为数组时使用,它返回一个给定对象自身可枚举属性的键值对数组。
但现在您可以通过Object.fromEntries将操作的数组返回到对象中。
下面是一个示例(将所有对象属性的值平方):
constobj={prop1:2,prop2:10,prop3:15}; //转化为键值对数组: letarray=Object.entries(obj); //[["prop1",2],["prop2",10],["prop3",15]]
将所有对象属性的值平方:
array=array.map(([key,value])=>[key,Math.pow(value,2)]); //[["prop1",4],["prop2",100],["prop3",225]]
我们将转换后的数组array作为参数传入Object.fromEntries,将数组转换成了一个对象:
constnewObj=Object.fromEntries(array); //{prop1:4,prop2:100,prop3:225}
可选的Catch参数
新提案允许您完全省略catch()参数,因为在许多情况下,您并不想使用它:
try{ //... }catch(er){ //handleerrorwithparameterer } try{ //... }catch{ //handleerrorwithoutparameter }
Symbol.description
description是一个只读属性,它会返回Symbol对象的可选描述的字符串,用来代替toString()方法。
consttestSymbol=Symbol("Desc"); testSymbol.description;//"Desc" testSymbol.toString();//"Symbol(Desc)"
Function.toString()
现在,在函数上调用toString()会返回函数,与它的定义完全一样,包括空格和注释。
之前:
function/*foocomment*/foo(){} foo.toString();//"functionfoo(){}"
现在:
foo.toString();//"function/*foocomment*/foo(){}"
JSON.parse()改进
行分隔符(u2028)和段落分隔符(u2029),现在被正确解析,而不是报一个语法错误。
varstr='{"name":"Bottle\u2028AnGe"}' JSON.parse(str) //{name:"Bottle AnGe"}
原文链接:JavaScript:What'snewinES2019
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。