UI5 中的 const 和 let 声明
const and let declarations in UI5
我想知道在使用 UI5 时使用 let
和 const
关键字是否安全。我不知道返回 let
、const
,甚至创建 sap.m.Table
和 let
是否会产生不利影响。
也许有人对此有过一些经验?
我猜你是怕浏览器不兼容吧? let
和 const
是用于声明变量的结构;它们不会影响对象的生命周期。 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+ 功能(包括 const
和 let
),没有任何问题。
更新: 在尝试测试包含 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"
我想知道在使用 UI5 时使用 let
和 const
关键字是否安全。我不知道返回 let
、const
,甚至创建 sap.m.Table
和 let
是否会产生不利影响。
也许有人对此有过一些经验?
我猜你是怕浏览器不兼容吧? let
和 const
是用于声明变量的结构;它们不会影响对象的生命周期。 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+ 功能(包括 const
和 let
),没有任何问题。
更新: 在尝试测试包含 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"