1e41f4b71Sopenharmony_ci# ArkCompiler Subsystem Changelog
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## cl.arkcompiler.1 Behavior of JSON.parse in Invalid String Scenarios Changed
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci**Access Level**
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ciPublic API
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci**Reason for Change**
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ciWhen **JSON.parse** is used to parse invalid strings, no JS exception is thrown. This symptom is different from the expectation and ECMA specifications.
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci**Change Impact**
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ciThis change is a non-compatible change.
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci```
18e41f4b71Sopenharmony_ciconst strData = `{"k1": "hello", "k2": 3}`;
19e41f4b71Sopenharmony_ciconst strErr = strData.substring(0, strData.length - 2); // `{"k1": "hello", "k2": `
20e41f4b71Sopenharmony_ciJSON.parse(strErr);
21e41f4b71Sopenharmony_ci```
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ciBefore change: **JSON.parse** can properly parse the invalid string **strErr**, and no JS exception is thrown.
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ciAfter change: A JS exception is thrown when **JSON.parse** is used to parse the invalid string **strErr**.
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ci**Start API Level**
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci12
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci**Change Since**
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ci5.0 Beta3
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci**Key API/Component Changes**
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ciJSON.parse/ASON.parse/util.json.parse
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**Adaptation Guide**
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ciWhen using **JSON.parse**, ensure that the input strings are valid or use **try-catch** to capture exceptions.
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci## cl.arkcompiler.2 Behavior of JSON.parse in Underflow Floating Point Number or -0 Scenario Changed
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci**Access Level**
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ciPublic API
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci**Reason for Change**
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ciWhen the string parsed by **JSON.parse** contains an underflow floating point number or **-0**, the API behavior does not comply with the specifications.
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci**Change Impact**
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ciThis change is a non-compatible change.
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ciBefore change:
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ciThe statement **JSON.parse('123.456e-789');** returns **-Infinity**, which is an error result.
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ciThe statement **1/JSON.parse('-0');** returns **Infinity**, which is an error result.
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ciAfter change:
64e41f4b71Sopenharmony_ci
65e41f4b71Sopenharmony_ciThe statement **JSON.parse('123.456e-789');** returns **0**, which is the correct result.
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ciThe statement **1/JSON.parse('-0');** returns **-Infinity**, which is the correct result.
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_ci**Start API Level**
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ci12
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci**Change Since**
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci5.0 Beta3
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci**Key API/Component Changes**
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_ciJSON.parse/ASON.parse/util.json.parse
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ci**Adaptation Guide**
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ciCheck whether an underflow floating-point number and **-0** is passed in to **JSON.parse**. If so, check whether the code logic can adapt to the correct value.
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci## cl.arkcompiler.3 Changes in TextEncoder.encodeInto()
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci**Access Level**
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ciPublic API
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci**Reason for Change**
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ciWhen **TextEncoder.encodeInto** is used to encode a string, the length of the returned array incorrectly increases by 2 each time the character '\0' is added to the string.
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci**Change Impact**
96e41f4b71Sopenharmony_ci
97e41f4b71Sopenharmony_ciThis change is a non-compatible change.
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci```
100e41f4b71Sopenharmony_ciconst arr = encoder.encodeInto('\0ab');
101e41f4b71Sopenharmony_ciarr.length;
102e41f4b71Sopenharmony_ci```
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ciBefore change: For **arr = [0x00, 0x61, 0x62, 0x00]**, **arr.length** is 4.
105e41f4b71Sopenharmony_ci
106e41f4b71Sopenharmony_ciAfter change: For **arr = [0x00, 0x61, 0x62]**, **arr.length** is 3.
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci**Start API Level**
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci9
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci**Change Since**
113e41f4b71Sopenharmony_ci
114e41f4b71Sopenharmony_ci5.0 Beta3
115e41f4b71Sopenharmony_ci
116e41f4b71Sopenharmony_ci**Key API/Component Changes**
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_ciTextEncoder.encodeInto
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci**Adaptation Guide**
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ciWhen encoding a string using **TextEncoder.encodeInto**, pay attention to the length of the returned array.
123