13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_cienum Mammals { 173af6ab5fSopenharmony_ci Humans = 'Humans', 183af6ab5fSopenharmony_ci Bats = 'Bats', 193af6ab5fSopenharmony_ci Dolphins = 'Dolphins', 203af6ab5fSopenharmony_ci} 213af6ab5fSopenharmony_ci 223af6ab5fSopenharmony_cifor (const m in Mammals) { 233af6ab5fSopenharmony_ci if (true) console.log(m); 243af6ab5fSopenharmony_ci} 253af6ab5fSopenharmony_ci 263af6ab5fSopenharmony_ci/** 273af6ab5fSopenharmony_ci * OK, spec 7.5.2 Type inference from Types of Elements 283af6ab5fSopenharmony_ci * type is (number | string | boolean)[], it is inferred from types of the elements. 293af6ab5fSopenharmony_ci */ 303af6ab5fSopenharmony_ciconst someArray = [1, 'string', false]; 313af6ab5fSopenharmony_cifor (const entry of someArray) { 323af6ab5fSopenharmony_ci console.log(entry); // 1, "string", false 333af6ab5fSopenharmony_ci} 343af6ab5fSopenharmony_ci 353af6ab5fSopenharmony_cifor (const entry of [1, 'string', false]) { 363af6ab5fSopenharmony_ci console.log(entry); // 1, "string", false 373af6ab5fSopenharmony_ci} 383af6ab5fSopenharmony_ci 393af6ab5fSopenharmony_ci/** 403af6ab5fSopenharmony_ci * NOT OK 413af6ab5fSopenharmony_ci * type is explicitly specified to be tuple 423af6ab5fSopenharmony_ci */ 433af6ab5fSopenharmony_ciconst someTuple: [number, string, boolean] = [1, 'string', false]; 443af6ab5fSopenharmony_cifor (const entry of someTuple) { 453af6ab5fSopenharmony_ci console.log(entry); // 1, "string", false 463af6ab5fSopenharmony_ci} 473af6ab5fSopenharmony_ci 483af6ab5fSopenharmony_ciconst list = [4, 5, 6]; 493af6ab5fSopenharmony_cifor (const i in list) { 503af6ab5fSopenharmony_ci if (true) console.log(i); // "0", "1", "2", 513af6ab5fSopenharmony_ci} 523af6ab5fSopenharmony_ci 533af6ab5fSopenharmony_cifor (const i of list) { 543af6ab5fSopenharmony_ci console.log(i); // 4, 5, 6 553af6ab5fSopenharmony_ci} 563af6ab5fSopenharmony_ci 573af6ab5fSopenharmony_cifor (const i of [4, 5, 6]) { 583af6ab5fSopenharmony_ci console.log(i); // 4, 5, 6 593af6ab5fSopenharmony_ci} 603af6ab5fSopenharmony_ci 613af6ab5fSopenharmony_ciconst s = 'abc'; // type is 'abc' 623af6ab5fSopenharmony_cifor (const c of s) { 633af6ab5fSopenharmony_ci console.log(c); 643af6ab5fSopenharmony_ci} 653af6ab5fSopenharmony_ci 663af6ab5fSopenharmony_cilet s2 = 'abs' // type is string 673af6ab5fSopenharmony_cifor (const c of s2) { 683af6ab5fSopenharmony_ci console.log(c); 693af6ab5fSopenharmony_ci} 703af6ab5fSopenharmony_ci 713af6ab5fSopenharmony_cifor (const c of 'abc') { 723af6ab5fSopenharmony_ci console.log(c); 733af6ab5fSopenharmony_ci} 743af6ab5fSopenharmony_ci 753af6ab5fSopenharmony_cifor (const i in s) { 763af6ab5fSopenharmony_ci if (true) console.log(i); 773af6ab5fSopenharmony_ci} 783af6ab5fSopenharmony_ci 793af6ab5fSopenharmony_ciconst arr = ['z', 'x', 'y']; 803af6ab5fSopenharmony_ci 813af6ab5fSopenharmony_cifor (const c of arr) { 823af6ab5fSopenharmony_ci console.log(c); 833af6ab5fSopenharmony_ci} 843af6ab5fSopenharmony_ci 853af6ab5fSopenharmony_cilet i: number, j: number, k: number; 863af6ab5fSopenharmony_ci// legal 'comma' operator 873af6ab5fSopenharmony_cifor (i = 1, j = 2, k = 3; i * j * k > 0; i++, k--, j += 2) { 883af6ab5fSopenharmony_ci continue; 893af6ab5fSopenharmony_ci} 903af6ab5fSopenharmony_ci// illegal 'comma' operator 913af6ab5fSopenharmony_cifor (i = 1, ((j = 2), (k = 3)); i * j * k > 0; i--, (k++, j--)) { 923af6ab5fSopenharmony_ci continue; 933af6ab5fSopenharmony_ci} 943af6ab5fSopenharmony_ci 953af6ab5fSopenharmony_ciconst a1 = [0, 1]; 963af6ab5fSopenharmony_ciconst a2 = [1, 2, 3, 4, 5]; 973af6ab5fSopenharmony_ciconst a3: number[] = [1, 2, 3, 4, 5]; 983af6ab5fSopenharmony_ciconst a4: Array<number> = [1, 2, 3, 4, 5]; 993af6ab5fSopenharmony_ciconst a5 = new Array(10); 1003af6ab5fSopenharmony_ciconst a6 = new Int8Array(10); 1013af6ab5fSopenharmony_ciconst a7 = new Uint8Array(10); 1023af6ab5fSopenharmony_ciconst a8 = new Uint8ClampedArray(10); 1033af6ab5fSopenharmony_ciconst a9 = new Int16Array(10); 1043af6ab5fSopenharmony_ciconst a10 = new Uint16Array(10); 1053af6ab5fSopenharmony_ciconst a11 = new Int32Array(10); 1063af6ab5fSopenharmony_ciconst a12 = new Uint32Array(10); 1073af6ab5fSopenharmony_ciconst a13 = new Float32Array(10); 1083af6ab5fSopenharmony_ciconst a14 = new Float64Array(10); 1093af6ab5fSopenharmony_ciconst a15 = new BigInt64Array(10); 1103af6ab5fSopenharmony_ciconst a16 = new BigUint64Array(10); 1113af6ab5fSopenharmony_ci 1123af6ab5fSopenharmony_cifor (const i of a1) { 1133af6ab5fSopenharmony_ci console.log(i); 1143af6ab5fSopenharmony_ci} 1153af6ab5fSopenharmony_cifor (const i of a2) { 1163af6ab5fSopenharmony_ci console.log(i); 1173af6ab5fSopenharmony_ci} 1183af6ab5fSopenharmony_cifor (const i of a3) { 1193af6ab5fSopenharmony_ci console.log(i); 1203af6ab5fSopenharmony_ci} 1213af6ab5fSopenharmony_cifor (const i of a4) { 1223af6ab5fSopenharmony_ci console.log(i); 1233af6ab5fSopenharmony_ci} 1243af6ab5fSopenharmony_cifor (const i of a5) { 1253af6ab5fSopenharmony_ci console.log(i); 1263af6ab5fSopenharmony_ci} 1273af6ab5fSopenharmony_cifor (const i of a6) { 1283af6ab5fSopenharmony_ci console.log(i); 1293af6ab5fSopenharmony_ci} 1303af6ab5fSopenharmony_cifor (const i of a7) { 1313af6ab5fSopenharmony_ci console.log(i); 1323af6ab5fSopenharmony_ci} 1333af6ab5fSopenharmony_cifor (const i of a8) { 1343af6ab5fSopenharmony_ci console.log(i); 1353af6ab5fSopenharmony_ci} 1363af6ab5fSopenharmony_cifor (const i of a9) { 1373af6ab5fSopenharmony_ci console.log(i); 1383af6ab5fSopenharmony_ci} 1393af6ab5fSopenharmony_cifor (const i of a10) { 1403af6ab5fSopenharmony_ci console.log(i); 1413af6ab5fSopenharmony_ci} 1423af6ab5fSopenharmony_cifor (const i of a11) { 1433af6ab5fSopenharmony_ci console.log(i); 1443af6ab5fSopenharmony_ci} 1453af6ab5fSopenharmony_cifor (const i of a12) { 1463af6ab5fSopenharmony_ci console.log(i); 1473af6ab5fSopenharmony_ci} 1483af6ab5fSopenharmony_cifor (const i of a13) { 1493af6ab5fSopenharmony_ci console.log(i); 1503af6ab5fSopenharmony_ci} 1513af6ab5fSopenharmony_cifor (const i of a14) { 1523af6ab5fSopenharmony_ci console.log(i); 1533af6ab5fSopenharmony_ci} 1543af6ab5fSopenharmony_cifor (const i of a15) { 1553af6ab5fSopenharmony_ci console.log(i); 1563af6ab5fSopenharmony_ci} 1573af6ab5fSopenharmony_cifor (const i of a16) { 1583af6ab5fSopenharmony_ci console.log(i); 1593af6ab5fSopenharmony_ci} 1603af6ab5fSopenharmony_ci 1613af6ab5fSopenharmony_ciconst a17: (number | string)[] = [] 1623af6ab5fSopenharmony_ci 1633af6ab5fSopenharmony_cifor (const i of a17) { 1643af6ab5fSopenharmony_ci console.log(i) 1653af6ab5fSopenharmony_ci} 1663af6ab5fSopenharmony_ci 1673af6ab5fSopenharmony_ciclass P<T> extends Array<T> { 1683af6ab5fSopenharmony_ci foo() { 1693af6ab5fSopenharmony_ci for (let t of this) { 1703af6ab5fSopenharmony_ci console.log(t) 1713af6ab5fSopenharmony_ci } 1723af6ab5fSopenharmony_ci } 1733af6ab5fSopenharmony_ci} 1743af6ab5fSopenharmony_ci 1753af6ab5fSopenharmony_cilet a18 = new P<number>(1, 2, 3) 1763af6ab5fSopenharmony_cia18.foo() 1773af6ab5fSopenharmony_cifor (let t of a18) { 1783af6ab5fSopenharmony_ci console.log(t) 1793af6ab5fSopenharmony_ci} 1803af6ab5fSopenharmony_ci 1813af6ab5fSopenharmony_ciclass PN extends Array<number> { 1823af6ab5fSopenharmony_ci foo() { 1833af6ab5fSopenharmony_ci for (let t of this) { 1843af6ab5fSopenharmony_ci console.log(t) 1853af6ab5fSopenharmony_ci } 1863af6ab5fSopenharmony_ci } 1873af6ab5fSopenharmony_ci} 1883af6ab5fSopenharmony_ci 1893af6ab5fSopenharmony_cilet a19 = new PN(1, 2, 3) 1903af6ab5fSopenharmony_cia19.foo() 1913af6ab5fSopenharmony_cifor (let t of a19) { 1923af6ab5fSopenharmony_ci console.log(t) 1933af6ab5fSopenharmony_ci} 1943af6ab5fSopenharmony_ci 1953af6ab5fSopenharmony_ciclass MyInt8Array extends Int8Array {} 1963af6ab5fSopenharmony_ciclass MyUint8Array extends Uint8Array {} 1973af6ab5fSopenharmony_ciclass MyUint8ClampedArray extends Uint8ClampedArray {} 1983af6ab5fSopenharmony_ciclass MyInt16Array extends Int16Array {} 1993af6ab5fSopenharmony_ciclass MyUint16Array extends Uint16Array {} 2003af6ab5fSopenharmony_ciclass MyInt32Array extends Int32Array {} 2013af6ab5fSopenharmony_ciclass MyUint32Array extends Uint32Array {} 2023af6ab5fSopenharmony_ciclass MyFloat32Array extends Float32Array {} 2033af6ab5fSopenharmony_ciclass MyFloat64Array extends Float64Array {} 2043af6ab5fSopenharmony_ciclass MyBigInt64Array extends BigInt64Array {} 2053af6ab5fSopenharmony_ciclass MyBigUint64Array extends BigUint64Array {} 2063af6ab5fSopenharmony_ci 2073af6ab5fSopenharmony_ciconst a20 = new MyInt8Array(10); 2083af6ab5fSopenharmony_ciconst a21 = new MyUint8Array(10); 2093af6ab5fSopenharmony_ciconst a22 = new MyUint8ClampedArray(10); 2103af6ab5fSopenharmony_ciconst a23 = new MyInt16Array(10); 2113af6ab5fSopenharmony_ciconst a24 = new MyUint16Array(10); 2123af6ab5fSopenharmony_ciconst a25 = new MyInt32Array(10); 2133af6ab5fSopenharmony_ciconst a26 = new MyUint32Array(10); 2143af6ab5fSopenharmony_ciconst a27 = new MyFloat32Array(10); 2153af6ab5fSopenharmony_ciconst a28 = new MyFloat64Array(10); 2163af6ab5fSopenharmony_ciconst a29 = new MyBigInt64Array(10); 2173af6ab5fSopenharmony_ciconst a30 = new MyBigUint64Array(10); 2183af6ab5fSopenharmony_ci 2193af6ab5fSopenharmony_cifor (const i of a20) { 2203af6ab5fSopenharmony_ci console.log(i); 2213af6ab5fSopenharmony_ci} 2223af6ab5fSopenharmony_cifor (const i of a21) { 2233af6ab5fSopenharmony_ci console.log(i); 2243af6ab5fSopenharmony_ci} 2253af6ab5fSopenharmony_cifor (const i of a22) { 2263af6ab5fSopenharmony_ci console.log(i); 2273af6ab5fSopenharmony_ci} 2283af6ab5fSopenharmony_cifor (const i of a23) { 2293af6ab5fSopenharmony_ci console.log(i); 2303af6ab5fSopenharmony_ci} 2313af6ab5fSopenharmony_cifor (const i of a24) { 2323af6ab5fSopenharmony_ci console.log(i); 2333af6ab5fSopenharmony_ci} 2343af6ab5fSopenharmony_cifor (const i of a25) { 2353af6ab5fSopenharmony_ci console.log(i); 2363af6ab5fSopenharmony_ci} 2373af6ab5fSopenharmony_cifor (const i of a26) { 2383af6ab5fSopenharmony_ci console.log(i); 2393af6ab5fSopenharmony_ci} 2403af6ab5fSopenharmony_cifor (const i of a27) { 2413af6ab5fSopenharmony_ci console.log(i); 2423af6ab5fSopenharmony_ci} 2433af6ab5fSopenharmony_cifor (const i of a28) { 2443af6ab5fSopenharmony_ci console.log(i); 2453af6ab5fSopenharmony_ci} 2463af6ab5fSopenharmony_cifor (const i of a29) { 2473af6ab5fSopenharmony_ci console.log(i); 2483af6ab5fSopenharmony_ci} 2493af6ab5fSopenharmony_cifor (const i of a30) { 2503af6ab5fSopenharmony_ci console.log(i); 2513af6ab5fSopenharmony_ci} 2523af6ab5fSopenharmony_ci 2533af6ab5fSopenharmony_ciclass A<type1, type2> extends Map<type1, type2> {} 2543af6ab5fSopenharmony_ciclass B<type> extends Set<type> {} 2553af6ab5fSopenharmony_ciclass C extends String {} 2563af6ab5fSopenharmony_ci 2573af6ab5fSopenharmony_cilet map = new Map([["a", 1], ["b", 2], ["c", 3]]); 2583af6ab5fSopenharmony_cilet derivedFromMap = new A([["d", 4], ["e", 5], ["f", 6]]); 2593af6ab5fSopenharmony_cilet set = new Set<number>([1, 2, 3]); 2603af6ab5fSopenharmony_cilet derivedFromSet = new B<number>([4, 5, 6]); 2613af6ab5fSopenharmony_cilet str = "hello"; 2623af6ab5fSopenharmony_cilet derivedFromString = new C("world") 2633af6ab5fSopenharmony_ci 2643af6ab5fSopenharmony_cifor (let i of map) { 2653af6ab5fSopenharmony_ci console.log(i); 2663af6ab5fSopenharmony_ci} 2673af6ab5fSopenharmony_ci 2683af6ab5fSopenharmony_cifor (let i of derivedFromMap) { 2693af6ab5fSopenharmony_ci console.log(i); 2703af6ab5fSopenharmony_ci} 2713af6ab5fSopenharmony_ci 2723af6ab5fSopenharmony_cifor (let i of set) { 2733af6ab5fSopenharmony_ci console.log(i); 2743af6ab5fSopenharmony_ci} 2753af6ab5fSopenharmony_ci 2763af6ab5fSopenharmony_cifor (let i of derivedFromSet) { 2773af6ab5fSopenharmony_ci console.log(i); 2783af6ab5fSopenharmony_ci} 2793af6ab5fSopenharmony_ci 2803af6ab5fSopenharmony_cifor (let i of str) { 2813af6ab5fSopenharmony_ci console.log(i); 2823af6ab5fSopenharmony_ci} 2833af6ab5fSopenharmony_ci 2843af6ab5fSopenharmony_cifor (let i of derivedFromString) { 2853af6ab5fSopenharmony_ci console.log(i); 2863af6ab5fSopenharmony_ci} 287