• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkCompiler子系统Changelog
2
3## cl.arkcompiler.1 ArkTSUtils.ASON.stringify处理Map和Set里undefined的行为由跳过序列化改为与Ecmascript的标准容器对齐
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11往Map或Set里添加undefined元素后,通过ArkTSUtils.ASON.stringify序列化时,会跳过undefined的序列化,导致序列化出来的JSON字符串有问题,不符合JSON标准,后续使用会抛异常。
12
13**变更影响**
14
15此变更不涉及应用适配。
16
17变更前:往Map或Set里添加undefined元素后,通过ArkTSUtils.ASON.stringify序列化出来的是非法JSON字符串。如下示例:
18
19```ts
20import { ArkTSUtils } from '@kit.ArkTS'
21
22let map = new Map<string | undefined, string | undefined>();
23map.set("a", "A");
24map.set("b", undefined);
25map.set(undefined, "c");
26console.log(ArkTSUtils.ASON.stringify(map));
27// 修改前输出:{"a":"A","b":,:"c"}
28
29let set = new Set<string | undefined | null>();
30set.add("a");
31set.add(undefined);
32set.add(null);
33console.log(ArkTSUtils.ASON.stringify(set));
34// 修改前输出:["a",,null]
35```
36
37变更后:对undefined正确处理,通过ArkTSUtils.ASON.stringify序列化出来的字符串符合JSON规范。
38
39undefined的处理规格与Ecmascript的标准容器对齐,Set对齐Array,Map对齐Object。
401. Array里的undefined元素序列化JSON之后变为字符串null。
412. Object里,value为undefined的跳过序列化,key为undefined,value不为undefined时,key序列化为"undefined"。
42
43如下示例:
44
45```ts
46import { ArkTSUtils } from '@kit.ArkTS'
47
48let map = new Map<string | undefined, string | undefined>();
49map.set("a", "A");
50map.set("b", undefined);
51map.set(undefined, "c");
52console.log(ArkTSUtils.ASON.stringify(map));
53// 修改后输出:{"a":"A","undefined":"c"}
54
55let set = new Set<string | undefined | null>();
56set.add("a");
57set.add(undefined);
58set.add(null);
59console.log(ArkTSUtils.ASON.stringify(set));
60// 修改后输出:["a",null,null]
61```
62
63**起始 API Level**
64
6512
66
67**变更发生版本**
68
69从OpenHarmony SDK 5.1.0.50 开始。
70
71**变更的接口/组件**
72
73arkts.utils.d.ets文件ArkTSUTils.ASON.stringify接口
74
75**适配指导**
76
77往Map或Set里添加undefined元素后,通过ArkTSUtils.ASON.stringify序列化时,注意返回值的变更。
78