diff --git a/docs/uts/README.md b/docs/uts/README.md index 9422fb9156bc1ac6fe0b57a79f91d5523dff83c2..d84a497e8e1734f3dfdd4dedfd3c547767e83a01 100644 --- a/docs/uts/README.md +++ b/docs/uts/README.md @@ -28,14 +28,12 @@ uts这门语言,有2个用途: 1. 开发uni-app 和 uni-app x 的原生扩展插件:因为uts可以调用所有原生能力。 2. uts和uvue一起组合,开发原生级的项目,也就是 uni-app x 项目 -从HBuilderX 3.9起,支持uni-app x项目。 - -uni-app x 开发App时,输出的是纯原生的App(Android上就是kotlin的app),里面没有js引擎和webview。详见[uni-app x](../readme.md) +从HBuilderX 3.9起,支持uni-app x项目。详见[uni-app x](../readme.md) 也就是说,uts可以在uni-app中使用,也可以在uni-app x中使用。 - 在uni-app中,主编程语言是js。uts可以开发原生插件,包括API插件和组件插件。 -- 在uni-app x中,主编程语言是uts。不管是应用逻辑还是扩展插件,均使用uts编程,没有js。 +- 在uni-app x中,主编程语言是uts。不管是应用逻辑还是扩展插件,均使用uts编程。仅在Web平台和iOS的js驱动模式下可以使用js。 如果插件作者,开发了uts插件,也可以同时在uni-app和uni-app x中使用。比如这2个uts插件: - 电量:[https://ext.dcloud.net.cn/plugin?id=9295](https://ext.dcloud.net.cn/plugin?id=9295) @@ -145,7 +143,7 @@ vue 选项式开发时,冒号被用于赋值,无法通过let、const和冒 ``` -上述示例仅在 uni-app x 的uvue页面生效。uni-app js引擎版,不支持在页面里写uts代码,只支持在uts插件里写uts代码。 +上述示例仅在 uni-app x 的uvue页面生效。老版uni-app,即js引擎版,不支持在页面里写uts代码,只支持在uts插件里写uts代码。 ### 类型自动推导 diff --git a/docs/uts/buildin-object-api/promise.md b/docs/uts/buildin-object-api/promise.md index f94ccc1d4b7bc32ef1e8cfa9313aec917cc81696..e865d0d69903e4d535db7aca99b0590f9e79c342 100644 --- a/docs/uts/buildin-object-api/promise.md +++ b/docs/uts/buildin-object-api/promise.md @@ -1,6 +1,6 @@ # Promise -Promise 对象表示异步操作最终的完成(或失败)以及其结果值。仅 HBuilderX 3.9+ 安卓平台支持。 +Promise 对象表示异步操作最终的完成(或失败)以及其结果值。 ### Constructor(fn) @@ -220,3 +220,4 @@ Promise 对象表示异步操作最终的完成(或失败)以及其结果值 ## Bug & Tips@tips * 目前 Promise 类型编译到 kotlin 为 io.dcloud.uts.UTSPromise +* 编译到swift时暂不支持。但在uvue里因为iOS默认js驱动所以可以使用Promise \ No newline at end of file diff --git a/docs/uts/data-type.md b/docs/uts/data-type.md index 26bc5b2b8db5a72a70762fbd28d4cbdb6b953d40..8bd2dc4bb4c5f56fcce2765ea31c000ab7bba76e 100644 --- a/docs/uts/data-type.md +++ b/docs/uts/data-type.md @@ -1,7 +1,7 @@ # 类型@data-type 强类型语言的特点,是数据类型要求严格。它带来2个好处: -1. 高性能:明确的类型有更大的优化空间,在iOS和Android等OS上可以节省内存、提高运算速度;web端由于仍编译为js,不具有类型性能优化。 +1. 高性能:明确的类型有更大的优化空间,在Android等OS上可以节省内存、提高运算速度;web端由于仍编译为js,不具有类型性能优化。 2. 安全的代码:强类型代码编写虽然没有弱类型自由,但类型检查、非空检查...等各种检查可以提高代码的健壮性。 如果您是js开发者,那么需要一定的学习过程来掌握 UTS 的类型系统。总体原则是你将牺牲一些代码的灵活性,来换取代码的健壮性和高性能。 @@ -1710,6 +1710,8 @@ HBuilderX 3.9起内置了一个json转type工具,在`json编辑器`中选择 注意json数据的属性名称需要引号包围。 +如果找不到这个右键菜单,检查是否是右下角是否显示JSON编辑器;检查是否安装了uts/uni-app x相关插件,一般真机运行时会自动安装相关插件。 + ### 为vue的data中的json定义类型 uvue文件中data中的json数据也涉及类型定义。此时注意:type定义必须放在`export default {}`前面。 @@ -1776,7 +1778,7 @@ console.log(obj.age) //25 js中的 undefined类型表示变量被定义,但是未赋值或初始化。 -uts 仅在编译为js时支持 undefined,在编译为kotlin和swift时不支持 undefined。即App平台不允许变量未赋值。每个有类型的变量都需要初始化或赋值。 +uts 仅在编译为js时支持 undefined,在编译为kotlin和swift时不支持 undefined。即Android平台不允许变量未赋值。每个有类型的变量都需要初始化或赋值。 考虑多端,应避免使用undefined。 @@ -1835,7 +1837,7 @@ HBuilder支持给变量定义特殊值域string类型,这些类型在HBuilder - 支持 [|null](#null) (即可为空) - [字面量联合类型](#literal-union-type) -App平台不支持其他方式的联合类型。 +编译为非js时,不支持其他方式的联合类型。 在编译为js时开发者可以使用其他联合类型。但考虑到多端兼容,应尽量避免。 @@ -1849,4 +1851,4 @@ uts内置的类型,包括浏览器、Android、iOS内置的类型,在编译 **注意** -- web端联合类型等复杂类型在编译后会被擦除 +- 编译到js时联合类型等复杂类型在编译后会被擦除 diff --git a/docs/uts/function.md b/docs/uts/function.md index b5a5bd93b5090148b679e39647602f9f88bb2744..066352a261866c3f0b4390061a23353139b6d3aa 100644 --- a/docs/uts/function.md +++ b/docs/uts/function.md @@ -346,4 +346,4 @@ fn('a', 'b', 'c') // 'a' ['b', 'c'] fn('a', ...['b', 'c']) // 'a' ['b', 'c'] ``` -注意:在app平台,uvue 页面的 methods 中定义的方法不支持剩余参数。 +注意:在app-android平台,uvue 页面的 methods 中定义的方法不支持剩余参数。 diff --git a/docs/uts/operator.md b/docs/uts/operator.md index 2ad0dd8a91c58f6c58200fa56b8c50b45e4abf3b..868df39b6a9e4a38b26a96d4f35f3580b885cf39 100644 --- a/docs/uts/operator.md +++ b/docs/uts/operator.md @@ -175,7 +175,7 @@ const status = age >= 18 ? "adult" : "minor"; - `>>=` * 右移赋值运算符 (>>=) 将变量向右移动指定数量的位,并将结果赋值给变量。 - `===` - * 当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。对于运行时表示为原生类型的值(例如 Int),引用相等 (===)等价于相等(==)。 + * 当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。不同平台有差距,[见下](#completeComparison) - `!==` * 当两边操作数不指向同一个对象时,引用不等 (!==) 运算符返回true。 - `-` @@ -277,6 +277,15 @@ uts 中比较运算符在大部分场景下和 ts 中的行为一致,但是在 | Array == Array (!= 行为相同) | [1] == [1] | 结果为 false |结果为 true,数组类型相同,元素相同就为true | | Array === Array (!=== 行为相同) | [1] === [1] | 结果为 false |编译失败,不能比较 | +`===` 和 `!==`,本意是内存地址相同,即不仅值相同,并且是同一份对象。 + +但不同平台的逻辑略有差异: +- js中可以比较基础类型。swift中不可以比较基础类型,只能比较对象类型 +- js中比较相同字面量会返回true,比如1===1。但kotlin由于编译优化,可能会把两个字面量映射为同一内存地址,但也可能没有触发编译优化。如果没有优化为同一内存地址,那么kotlin上1===1就会返回false。而swift不允许比较字面量。 + +对于运行时表示为原生类型的值(例如 Int),引用相等 (===)等价于相等(==)。 + + ## 展开语法... > HBuilderX 3.9+ @@ -549,7 +558,7 @@ b instanceof Int //true > 3.93+ (Android) await 操作符用于等待一个 [Promise](./buildin-object-api/promise.md) 兑现并获取它兑现之后的值。它只能在[异步函数](./function.md#async)中使用。 -在 HBuilderX 3.93 以下的版本或者 iOS 平台,await 不能与 [Promise](./buildin-object-api/promise.md) 一同使用,此时请分别参考:[安卓 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_6-11-synchronized-lock-等线程同步概念-在uts里怎么写)、[iOS 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-ios.html#_5-1-13-异步方法)。 +在 HBuilderX 3.93 以下的版本或者编译为swift时,await 不能与 [Promise](./buildin-object-api/promise.md) 一同使用,此时请分别参考:[安卓 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_6-11-synchronized-lock-等线程同步概念-在uts里怎么写)、[iOS 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-ios.html#_5-1-13-异步方法)。 ```ts async function test(): Promise {