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