UI5 中的 const 和 let 声明

const and let declarations in UI5

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

也许有人对此有过一些经验?

我猜你是怕浏览器不兼容吧? letconst 是用于声明变量的结构;它们不会影响对象的生命周期。 let 声明一个块作用域变量,而 const 声明一个 read-only 变量。这些变量中包含的对象具有完全不同的生命周期。

这并不是一个真正的 UI5 问题,而是一个普遍的 JavaScript 问题。无论您使用的是什么库,您的应用程序的兼容性将由两个因素决定:

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

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

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

对于第一个问题,如果您只关心可以原生支持 ES6 的浏览器(not IE), then you can definitely use it. Otherwise, the second question might make more sense. If you have a decent C.I. pipeline in place for your app, then you could use something like babel 将您闪亮的 ES6 代码转换为 IE 非常喜欢的冗长的意大利面条。


稍后编辑:

根据评论,我要指出 all-or-nothing 不支持 ES6。特性 sub-sets(比如对 const 和 let 的支持)可能对某些浏览器 (IE) 可用,即使 ES6 不完整。具体来说,不支持基于https://caniuse.com/#feat=let and https://caniuse.com/#feat=const, it seems that let and const are available in IE11 (but not in older versions). Other features like ES6 class definitions

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

⚠ Restriction

We currently do not guarantee that newer ECMAScript standards, such as ES6/ES2015, work with OpenUI5.

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

更新: 在尝试测试包含 ES6+ 语法的应用程序代码时,启用覆盖率的 QUnit 测试可能无法启动。这表明 JS 资源不是异步加载的,并且 eval 在你的测试中被 Blanket.js 困扰。通过添加 data-sap-ui-async="true" 并将 unitTests.qunit.html 中弃用的 jQuery.sap.require 替换为等效的 <link><script> 标记来切换到异步加载。


SAP Web IDE 问题


更新: previous workaround is no longer needed as of @sap/grunt-sapui5-bestpractice-build v1.3.65 in Web IDE (See ).

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

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