Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
1739e1c8
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3598
Star
108
Fork
921
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
120
列表
看板
标记
里程碑
合并请求
109
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
120
Issue
120
列表
看板
标记
里程碑
合并请求
109
合并请求
109
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1739e1c8
编写于
8月 02, 2023
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update data-type.md
上级
fb8fc741
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
99 addition
and
4 deletion
+99
-4
docs/uts/data-type.md
docs/uts/data-type.md
+99
-4
未找到文件。
docs/uts/data-type.md
浏览文件 @
1739e1c8
...
...
@@ -210,10 +210,105 @@ let kotlinList = utsArr.toMutableList().toUTSArray()
### any类型 @any
如果定义变量时没有声明类型,也没有赋值。那么这个变量会被视为any类型。虽然可以使用,但uts中非常不建议这样使用。
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any 类型来标记这些变量:
```
ts
let
s
;
s
=
"
123
"
console
.
log
(
s
)
// hello world
let
notSure
:
any
=
4
;
notSure
=
"
maybe a string instead
"
;
notSure
=
false
;
// okay, definitely a boolean
```
当你只知道一部分数据的类型时,any类型也是有用的。 比如,你有一个数组,它包含了不同的类型的数据:
```
ts
let
list
:
any
[]
=
[
1
,
true
,
"
free
"
];
list
[
1
]
=
100
;
```
### null类型 @null
uts 的类型系统可以消除来自代码空引用的危险。
许多编程语言中最常见的陷阱之一,就是访问空引用的成员会导致空引用异常。在 Java 中,这等同于 NullPointerException 或简称 NPE。
在 uts 中,类型系统能够区分一个引用可以容纳 null (可空引用)还是不能容纳(非空引用)。 例如,String 类型的常规变量不能容纳 null:
```
ts
let
a
:
string
=
"
abc
"
// 默认情况下,常规初始化意味着非空
a
=
null
// 编译错误
```
如果要允许为空,可以声明一个变量为可空字符串(写作 string | null):
```
ts
let
b
:
string
|
null
=
"
abc
"
// 可以设置为空
b
=
null
// ok
```
现在,如果你调用 a 的方法或者访问它的属性,它保证不会导致 NPE,这样你就可以放心地使用:
```
ts
const
l
=
a
.
length
```
但是如果你想访问 b 的同一个属性,那么这是不安全的,并且编译器会报告一个错误:
```
ts
const
l
=
b
.
length
// 错误:变量“b”可能为空
```
但是,还是需要访问该属性,对吧?有几种方式可以做到。
#### 在条件中检测 null
首先,你可以显式检测 b 是否为 null:
```
ts
if
(
b
!=
null
)
{
console
.
log
(
b
.
length
)
}
```
编译器会跟踪所执行检测的信息,并允许你在 if 内部调用 length。
#### 安全的调用
访问可空变量的属性的第二种选择是使用安全调用操作符 ?.:
```
ts
const
a
=
"
uts
"
const
b
:
string
|
null
=
null
console
.
log
(
b
?.
length
)
console
.
log
(
a
?.
length
)
// 无需安全调用
```
如果 b 非空,就返回 b.length,否则返回 null,这个表达式的类型是 number | null。
安全调用在链式调用中很有用。例如,一个员工 Bob 可能会(或者不会)分配给一个部门。 可能有另外一个员工是该部门的负责人。获取 Bob 所在部门负责人(如果有的话)的名字, 写作:
```
ts
bob
?.
department
?.
head
?.
name
```
如果任意一个属性(环节)为 null,这个链式调用就会返回 null。
#### 空值合并
空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为 null 时,返回其右侧操作数,否则返回左侧操作数。
```
ts
const
foo
=
null
??
'
default string
'
;
console
.
log
(
foo
);
// Expected output: "default string"
const
baz
=
0
??
42
;
console
.
log
(
baz
);
// Expected output: 0
```
#### 非空断言
非空断言运算符(!)将任何值转换为非空类型。可以写 b! ,这会返回一个非空的 b 值(例如:在我们示例中的 String)或者如果 b 为 null,就会抛出一个异常。
```
ts
const
l
=
b
!
.
length
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录