阅读更多

1顶
1踩

Web前端

原创新闻 JavaScript ES2017 中值得期待的功能

2017-06-14 10:38 by 正式记者 powertoolsteam 评论(0) 有7611人浏览
由于ES6 / ES2015花了大约6年的时间,才得以发布,因此负责JavaScript语言规范的技术委员会TC39,决定按年度周期来发布ES。这种变化允许ES语言规范,以更小和更迭代的版本形式进行发布。这样可以保证:如果特征语言规格在今年截止日期之前没有完成,那么它可以包含在明年的发布版本中。这种较小但功能强大的年度发布周期形式,允许语言规范持续增长。
 

ES2017介绍

对很大一部分JavaScript开发者来说,ES2017可以让他们感受到新的、闪亮的技术前沿工具。无论是完全接受这项新技术,还是简单地只使用其中测试工具的功能,我们都想知道ES2017中到底有什么。
 
如果你热衷于了解这个令人兴奋的社区提供的所有新技术,下面是ES2017所包含的技术细节。
 

主要特点
1、异步函数

TJ HolowaychukJavaScript社区的一个巨大贡献者。TJ曾在Express, Koa, Rework, 和Co这样的项目中工作过,他的代码直接或间接地成为这些开发项目中的重要组成部分。
 
他对Co包做出的贡献,对最近转移到Stage 4 的Async Await功能规格产生了巨大的影响。Co 是一个利用Promises和Generator函数允许以更加同步的方式来读取异步JavaScript代码语法的库。
 
用Promises处理Async函数的一种普遍流程如下所示:
function fetchData(url) {
  return fetch(url)
    .then(request => request.text())
    .then(text => {
      return JSON.parse(text);
     })
    .catch(err => {
      console.log(`Error: ${err.stack}`);
    });
}
使用ES2017中的新增async和await关键字,我们可以利用全新的、与Co高度相似的语法来实现完全同步读取。我们可以使用try / catch blocks和新的关键字来为特定功能分配异步行为。在内部,Async功能与生成器的功能相同,但是却不能转换为Generator Functions。就像这样:
可以使用以下的方式编写ES2017中的Async函数:
async function fetchData(url) {
  try {
   let request = await fetch(url);
   let text = await request.text();
   return JSON.parse(text);
  }
  catch (err) {
    console.log(`Error: ${err.stack}`);
  }
}
 

异步函数声明

asyncfunction fooBar( ) { }
 

异步函数表达式

constfooBar = async function ( ) { };
 

异步方法定义

letobj = { async fooBar( ) { } }
 

异步箭头函数

constfooBar = async ( ) => { };
 

2、共享内存和Atomics

Lars Hansen提出了ES2017中 共享内存和Atomics的建议,截至2017年2月,它已在第4阶段中被批准,并包含到规范中。
 
此功能引入了一个新的低级别Atomics命名空间对象和一个SharedArrayBuffer构造函数,来作为更高级别并发抽象的原始构建块。这使开发人员能够共享多个service worker和核心线程之间的SharedArrayBuffer对象的数据。这种引入带来了巨大的益处,因为可以更轻松地在worker之间共享数据,从而可以改善worker之间的协调。
 
有关新的Atomics对象和SharedArrayBuffer构造函数的信息,请阅读深入分析或阅读Lars Hansen的简短教程
 

次要功能
1、功能参数列表和调用中的结尾逗号

该函数结尾逗号的建议是一个纯粹的语法更新的规范。在此规范更改之前,不允许在最后一个函数参数后面加上逗号,如下所示:
const trailCommaFn = function(
  param1,
  param2,
  param3,
  param4) { // No comma allowed here!
// do something in function body
}
 
ES2017带来了结尾逗号:
const trailCommaFn = function(
  param1,
  param2,
  param3,
  param4, // Comma allowed here!
) {
// do something in function body
}
 
这种语法更新使得函数中的逗号与规范的其余部分更加一致。在数组和对象文字中使用后缀逗号已经很普遍,现在我们可以使用相同的行为来进行函数列表和调用。
// Array
const arr = [
  1,
  2,
  3, // <--- Ok
];// Object Literal 
const obj = {
  x: 'foo',
  y: 'bar',
  z: 'baz', // <--- Ok
}
 
另外,这个规格更改是git友好的,因为开发人员不再需要编辑2行代码,以便为功能列表或调用添加1个参数。即使在最后一个参数之后,现在也可以使用逗号。
 

2、Object.values/ Object.entries

JordanHarband提出的Object.entries引入了一个entry概念。对象是键值对的数据结构,每个键值对都是entry。Object.entries(x)强制转换x为对象,并以数组的方式返回其可枚举的自定义字符串:
>>Object.entries({foo:1,bar:2})
     [['foo',1],['bar',2]]
 
与Object.entries非常相似,Object.values返回一个数组,其值为可枚举的字符串键值属性:
>> Object.values({foo:1,bar:2})
     [1,2]
 
两种方法的签名Object.entries( )和Object.values( )如下:
Object.entries(value:any):Array <[string,any]>
Object.values(value:any):Array <any>
 
 

3、字符串填充

引入了StringPadding规范功能,为JavaScript的一些本地方法提供了处理字符串功能。它提供了padStart和padEnd以及trimStart和trimEnd方法,从而使开发人员更好地控制字符串原语。
>>console.log('testing'.padStart(12).length)
   "     testing" is 12
>>console.log('testing'.padStart(12, '_'))
   "_____testing" is 12
 
 

4、Object.getOwnPropertyDescriptors

ECMAScript中没有单个方法来简化两个对象之间的正确拷贝。之前,功能编程和不可变对象是复杂应用程序的重要组成部分,每个框架或库都在实现自己的样板,以便在合成对象或原型之间,能够正确复制属性。
 
Object.getOwnPropertyDescriptors()是一个复数函数Object.getOwnPropertyDescriptor()旨在简化JavaScript中复制对象的过程。
Object.defineProperties()这个新的规范功能的引入,允许decorators可以轻松地从另一个类或混合中提取出所有的描述符,并将它们分配给一个新的对象。
 
这个提案的部分原因,也是因为使用Object.assign()方法不够理想。Object.assign( )以吞噬行为的方式复制对象- 它直接访问属性和符号而不是其描述符。当涉及组合和处理复杂对象和类的原型时,这可能会成为一个更为危险的问题。
 
通过这个规范更新,开发人员不再需要依赖Object.assign()来复制对象,而是利用一个真正的浅层拷贝的创建:
// Given an object `obj`>> Object.create(
     Object.getPrototypeOf(obj),
     Object.getOwnPropertyDescriptors(obj)
   );
 

 

 

更多TC39流程信息

TC39更改为年度发布周期,同时也修改了规范提案的处理方式。引入提案阶段为开源JS社区创建了更好的组织规则和透明度。每个提案必须经过Stage0到Stage4,最终才能成为语言规范的一部分。
Stage0 被称为“Strawman”阶段,其目的仅在于输入规范的初始阶段。
Stage1 被称为提案阶段,提案者为特性添加提供了案例,描述了解决方案并确定了可能出现的问题。
Stage2 被称为草案阶段,期间提议者必须使用正式规范语言精确地描述语法和语义。
Stage3 被称为候选阶段,期间提议者必须大量测试这些功能/功能。此阶段的提案预示着,需要进一步细化实施和用户的反馈。
Stage4 被称为完成阶段,这表明该添加项已准备好纳入正式的ECMAScript标准。
 
有关每个阶段的更多信息,请参阅TC39官方流程文件
 
目前,有7项提案在该流程的第3阶段,最有可能达到ES2018规范发布的第4阶段的要求。它们如下:
· global
· Asynchronous Iteration
 
要了解有关即将到来的JavaScript版本的更改和更新的更多信息,请持续关注TC39 Github Repository上提案阶段列表
 

现在使用ES2017功能

如果你渴望测试这些ES2017的功能,尤其是async和await,可以通过Babel's Docs on ES2017 Preset来获取,它将所有ES2017功能编译成了ES2016代码。此外,你还可以使用Babel的最新预设,它允许在代码库中编译所有ES2015,ES2016和最终ES2017功能。
 
想要深入了解新的ES2017规格功能,可以查看Dr. Axel Rauschmayer的“ Exploring ES2016 & Es2017”
 
JavaScript开发工具介绍:
Wijmo是一款用TypeScript编写的新一代JavaScript/html5控件集。在全球率先支持AngularJS,并提供性能卓越、零依赖的FlexGrid 和图表等多个控件,是构建企业应用程序的全套控件集。
 
转载请注明出自:葡萄城控件

 

1
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • html5 开源框架2017,2017年值得关注的3个JavaScript库

    无数新的令人印象深刻的库和框架涌现,你可能不需要 JavaScript 展示了一些模式,提出了使用 JavaScript 的一些问题,和一张Nolan Lawson谈前端的幻灯片引起了业内牛人的一些骚动和响应,像 Jeremy Keith 和 ...

  • JavaScript ES2021 最值得期待的 5 个新特性解析

    JavaScript 中对象的引用是强引用,WeakMap 和 WeakSet 可以提供部分的弱引用功能,若想在 JavaScript 中实现真正的弱引用,可以通过配合使用 WeakRef 和终结器(Finalizer)来实现。 WeakRef 是用来指目标对象不...

  • 今年最值得期待的JavaScript传奇绿皮书登场!

    “能用 JavaScript 实现的东西, 迟早会用 JavaScript 实现” 这句“狂妄”的话,如今正在实现着 …… 今天,博文菌带来一本JavaScript领域的经典之作, 介绍之前,我不得不感叹: 这本书的份量,实在是太重了! 它...

  • ES2020的这些新功能令人期待

    来源 |https://www.grapecity.com.cn/最近这几年,随着JavaScript及前端领域的持续迅猛发展,尤其是在2015年ES6发布后,这个发展的进程也变得越来...

  • 2017 年值得一瞥的 JavaScript 相关技术趋势

    JS社区毫不犹豫的抛出了它们对于新技术的预期与期待,本文内容也是总结自Twitter的回复,按照流行度降序排列。有一个尚未确定的小点是既然函数式编程已不再是少数派,是否要把它踢出红毯呢? WebAssembly 去年...

  • 2017值得一瞥的JavaScript相关技术趋势

    2017值得一瞥的JavaScript相关技术趋势从属于笔者的Web 前端入门与工程实践,推荐阅读2016-我的前端之路:工具化与工程化获得更多关于2016年前端总结。本文主要内容翻译自,笔者对于每个条目进行了些许完善。 本文...

  • TypeScript 官方:JavaScript 中直接支持类型!

    TypeScript 团队在深夜突然发了一条推,神秘兮兮说:“如果我们可以直接在 JavaScript 中支持类型,会怎么样?”。他们在评论区说:“类型作为注释”的提案意味着浏览器可以直接...

  • 5116-微信小程序电影院订票选座系统设计及实现+ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

  • JavaScript 中的 `Array.prototype.filter` 方法全解析

    在 JavaScript 编程中,处理数组是一项基本而重要的任务。数组的过滤操作是其中的一个常见需求,Array.prototype.filter 方法为此提供了强大的支持。本文将深入探讨 Array.prototype.filter 方法的工作原理、使用场景、代码示例以及与其他数组方法的比较。 Array.prototype.filter 是 JavaScript 中处理数组的强大工具,它允许开发者以声明式的方式轻松筛选出符合特定条件的元素。通过结合使用 Array.prototype.filter 和其他数组方法,可以解决各种复杂的数据筛选问题。 通过本文的详细介绍和示例代码,你应该能够掌握 Array.prototype.filter 的工作原理,并能够在实际开发中灵活运用它来处理数组数据。此外,了解其与 Array.prototype.map 和 Array.prototype.reduce 的结合使用,可以帮助你更好地编写高效且易于维护的代码。

  • 5108-微信小程序的书橱+ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

  • 5046-微信小程序校园二手交易平台的小程序+ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

  • SMT小型视觉贴片机控制系统源码源代码图纸 DI

    SMT小型视觉贴片机控制系统源码源代码图纸 DI

  • 图书馆自动化管理系统.zip

    这是一个基于Apache kafka、Docker Compose、MongoDB和Flask技术的图书馆自动化管理系统。该项目旨在实现图书馆的各项服务自动化,包括图书借阅、预约和搜索功能。通过Flask构建REST API,使用MongoDB存储和管理图书、用户、借阅记录、罚款和预约等相关数据。apache Kafka用于系统各组件之间的消息通信,确保消息传递的可靠性和可扩展性。项目还实现了用户认证和授权功能,通过JWT进行安全认证和授权。每个对系统服务的请求都需要使用JWT进行验证。项目提供了全面的文档,解释了系统架构、数据库模式和API端点。同时,项目明确了所有依赖关系,并提供了环境搭建指南,便于其他开发者轻松复制环境。此外,项目还包含测试用例,以确保关键功能的正常运行。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

  • 【前景培训教材】第九章4G和5G信令流程.pdf

    以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。

  • 5040-微信小程序私家车位共享系统+ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

  • java-ssm+jsp社区文化宣传网站实现源码(项目源码-说明文档)

    社区文化宣传网站可以查看首页、社区新闻、社区公告、社区活动、医疗服务、社区美食、家政服务、我的、跳转到后台等 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:jsp 关键技术:jsp、spring、ssm、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

  • 自己整理的Ansible 自动化运维实战笔记分享给需要的同学.zip

    自己整理的Ansible 自动化运维实战笔记分享给需要的同学.zip

  • 5200-微信小程序婚庆摄影小程序ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

  • 5043-微信小程序消防隐患在线举报系统开发+ssm(源码+数据库+lun文).zip

    本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。

Global site tag (gtag.js) - Google Analytics