在UI5中使用const和let声明

时间:2018-03-12 14:37:04

标签: javascript sapui5

我想知道在使用UI5时使用letconst关键字是否安全。我不知道退回letconst,甚至创建sap.m.Table let会产生不良影响。

也许某人以前有过这方面的经验?

3 个答案:

答案 0 :(得分:2)

关于与UI5可能不兼容的documentation still warns

  

!限制

     

我们目前不保证OpenUI5可以使用更新的ECMAScript标准,例如ES6 / ES2015。

另一方面,到目前为止,我一直在UI5上使用ES6 +功能(包括constlet),到目前为止没有任何问题。


SAP Web IDE问题

更新:从@sap/grunt-sapui5-bestpractice-build的1.3.65开始,不再需要以下解决方法。参见MLauffer's answer

您可能会遇到的一个问题是 Web IDE当前无法部署启用ES6的应用,因为IDE仍使用npm任务grunt-openui5 src 在构建期间作为@sap/grunt-sapui5-bestpractice-build任务的一部分运行。 doc 过时的grunt-openui5任务使用了旧的uglify-js,它没有无法理解ES6语法。

尽管0.14.x版本最终支持ES6 +语法,但是grunt-sapui5-bestpractice-build仍使用旧的0.11.x版本,如果使用了ES6功能,则会导致生成错误(语法错误)。

解决方法之一是手动在package.json 中添加当前的grunt-openui5依赖项:

{
  "name": "...",
  "version": "0.0.1",
  "description": "...",
  "private": true,
  "devDependencies": {
    "@sap/grunt-sapui5-bestpractice-build": "1.3.62",
    "grunt-openui5": "0.15.0"
  }
}

然后,使用ES6 +语法构建应用程序成功。

答案 1 :(得分:1)

只要您使用更新版本的构建模块,SAP WebIDE便可以部署ES6 let / const语法。

只需使用:“ @ sap / grunt-sapui5-bestpractice-build”:“ 1.3.65”

答案 2 :(得分:0)

我会假设您害怕浏览器不兼容? letconst是用于声明变量的构造;它们不会影响对象的生命周期。 let声明了一个块作用域变量,而const声明了一个只读变量。这些变量中包含的对象具有完全不同的生命周期。

这不是UI5问题,而是一般的JavaScript问题。无论您使用哪种库,您的应用程序的兼容性将由两个因素决定:

  • 您正在使用的每个库的兼容性矩阵。
  • 您正在编写的代码的兼容性。

由于你无法真正控制兼容性matrix of UI5(应涵盖ES6的兼容性矩阵),所有这些都归结为你必须要问自己的两个主要问题:

  • 我支持哪些浏览器?
  • 我可以使用某些东西来转换我的代码以支持旧浏览器吗?

对于第一个问题,如果您只关心可以支持本机ES6(not IE)的浏览器,那么您绝对可以使用它。否则,第二个问题可能更有意义。如果你有一个体面的C.I.适用于您的应用程序的管道,然后您可以使用babel之类的东西将闪亮的ES6代码转换为IE非常喜欢的冗长的意大利面。

稍后编辑:

根据评论,我会指出ES6并非以全有或全无的方式支持。特征子集(如const和let的支持)可能适用于某些浏览器(IE),即使整个ES6不是。具体而言,基于https://caniuse.com/#feat=lethttps://caniuse.com/#feat=const,IE11中似乎可以使用letconst(但旧版本中不可用)。其他功能如ES6 class definitions不受支持。