14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_cilet array = ['1', '2', '3'];
174514f5e3Sopenharmony_cilet map = new Map();
184514f5e3Sopenharmony_cimap.set('a', 1);
194514f5e3Sopenharmony_cimap.set('b', 2);
204514f5e3Sopenharmony_ci
214514f5e3Sopenharmony_cifunction func() {
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_ci}
244514f5e3Sopenharmony_ci
254514f5e3Sopenharmony_cilet objs = [array, map, func];
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_ci// integer or float constant
284514f5e3Sopenharmony_cilet num1 = 42; // int
294514f5e3Sopenharmony_cilet num2 = 3.14; // float
304514f5e3Sopenharmony_cilet bigInt = BigInt(9007199254740991);
314514f5e3Sopenharmony_cilet num3 = NaN; // nan number
324514f5e3Sopenharmony_cilet num4 = Infinity; // Positive infinity
334514f5e3Sopenharmony_cilet num5 = -Infinity; // negative infinity
344514f5e3Sopenharmony_ci
354514f5e3Sopenharmony_ci// string
364514f5e3Sopenharmony_cilet str1 = 'Hello';
374514f5e3Sopenharmony_cilet str2 = 'World';
384514f5e3Sopenharmony_cilet str3 = `This is a template string. ${str1} ${str2}!`;
394514f5e3Sopenharmony_ci
404514f5e3Sopenharmony_ci// bool
414514f5e3Sopenharmony_cilet bool1 = true;
424514f5e3Sopenharmony_cilet bool2 = false;
434514f5e3Sopenharmony_ci
444514f5e3Sopenharmony_ci// null type
454514f5e3Sopenharmony_cilet nullVar = null;
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_ci// undefined type
484514f5e3Sopenharmony_cilet undefinedVar;
494514f5e3Sopenharmony_ci
504514f5e3Sopenharmony_ci// array type
514514f5e3Sopenharmony_cilet arr0 = new Int8Array();
524514f5e3Sopenharmony_cilet arr1 = new Uint8Array();
534514f5e3Sopenharmony_cilet arr2 = new Int16Array();
544514f5e3Sopenharmony_cilet arr3 = new Uint16Array();
554514f5e3Sopenharmony_cilet arr4 = new Int32Array();
564514f5e3Sopenharmony_cilet arr5 = new Uint32Array();
574514f5e3Sopenharmony_cilet arr6 = new BigInt64Array();
584514f5e3Sopenharmony_cilet arr7 = new BigUint64Array();
594514f5e3Sopenharmony_cilet arr8 = new Float32Array();
604514f5e3Sopenharmony_cilet arr9 = new Float64Array();
614514f5e3Sopenharmony_cilet arr10 = new Uint8ClampedArray();
624514f5e3Sopenharmony_cilet buffer = new ArrayBuffer(8);
634514f5e3Sopenharmony_cilet sharedBuf = new SharedArrayBuffer(1024);
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_cilet list = [1, 2, 3, 4, 5];
664514f5e3Sopenharmony_cifor (let item of list) {
674514f5e3Sopenharmony_ci  print(item);
684514f5e3Sopenharmony_ci}
694514f5e3Sopenharmony_ci
704514f5e3Sopenharmony_ci// funtion
714514f5e3Sopenharmony_cifunction greet() {
724514f5e3Sopenharmony_ci  print('Hello, this is a function!');
734514f5e3Sopenharmony_ci}
744514f5e3Sopenharmony_ci
754514f5e3Sopenharmony_ci// data type
764514f5e3Sopenharmony_cilet date = new Date();
774514f5e3Sopenharmony_ci
784514f5e3Sopenharmony_ci// lambda
794514f5e3Sopenharmony_cilet regex = /hello/i; // Case insensitive matching "hello"
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ci// object type
824514f5e3Sopenharmony_cilet obj = {
834514f5e3Sopenharmony_ci  name: 'Alice',
844514f5e3Sopenharmony_ci  age: 25,
854514f5e3Sopenharmony_ci  greet: function() {
864514f5e3Sopenharmony_ci    print('Hello, my name is ' + this.name);
874514f5e3Sopenharmony_ci  }
884514f5e3Sopenharmony_ci};
894514f5e3Sopenharmony_ci
904514f5e3Sopenharmony_ci// class
914514f5e3Sopenharmony_ciclass Person {
924514f5e3Sopenharmony_ci  constructor(name, age) {
934514f5e3Sopenharmony_ci    this.name = name;
944514f5e3Sopenharmony_ci    this.age = age;
954514f5e3Sopenharmony_ci  }
964514f5e3Sopenharmony_ci
974514f5e3Sopenharmony_ci  greet() {
984514f5e3Sopenharmony_ci    print(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
994514f5e3Sopenharmony_ci  }
1004514f5e3Sopenharmony_ci}
1014514f5e3Sopenharmony_ci
1024514f5e3Sopenharmony_ciglobalThis.person = new Person('Alice', 25);
1034514f5e3Sopenharmony_ci
1044514f5e3Sopenharmony_ci// Exception
1054514f5e3Sopenharmony_cifunction divide(a, b) {
1064514f5e3Sopenharmony_ci  if (b === 0) {
1074514f5e3Sopenharmony_ci    throw new Error('The divisor cannot be 0');
1084514f5e3Sopenharmony_ci  }
1094514f5e3Sopenharmony_ci  return a / b;
1104514f5e3Sopenharmony_ci}
1114514f5e3Sopenharmony_ci
1124514f5e3Sopenharmony_citry {
1134514f5e3Sopenharmony_ci  let result = divide(10, 0);
1144514f5e3Sopenharmony_ci} catch (error) {
1154514f5e3Sopenharmony_ci  print('\nthrow statement\n');
1164514f5e3Sopenharmony_ci}
1174514f5e3Sopenharmony_ci
1184514f5e3Sopenharmony_ci// Promise
1194514f5e3Sopenharmony_cilet promise = new Promise((resolve, reject) => {
1204514f5e3Sopenharmony_ci  // Simulated asynchronous operation
1214514f5e3Sopenharmony_ci  setTimeout(() => {
1224514f5e3Sopenharmony_ci    let success = false; // Simulated operation failed
1234514f5e3Sopenharmony_ci    if (success) {
1244514f5e3Sopenharmony_ci      resolve('operation success');
1254514f5e3Sopenharmony_ci    } else {
1264514f5e3Sopenharmony_ci      reject(new Error('operation failed'));
1274514f5e3Sopenharmony_ci    }
1284514f5e3Sopenharmony_ci  }, 1000);
1294514f5e3Sopenharmony_ci});
1304514f5e3Sopenharmony_ci
1314514f5e3Sopenharmony_cipromise.then((result) => {
1324514f5e3Sopenharmony_ci  print(result);
1334514f5e3Sopenharmony_ci}).catch((error) => {
1344514f5e3Sopenharmony_ci  print('Promise handle\n');
1354514f5e3Sopenharmony_ci});
1364514f5e3Sopenharmony_ci
1374514f5e3Sopenharmony_ci// Asynchronous type
1384514f5e3Sopenharmony_ciasync function fetchDataWithAsyncAwait() {
1394514f5e3Sopenharmony_ci  return 'async/await get the data';
1404514f5e3Sopenharmony_ci}
1414514f5e3Sopenharmony_ci
1424514f5e3Sopenharmony_ciasync function fetchAndLogData() {
1434514f5e3Sopenharmony_ci  try {
1444514f5e3Sopenharmony_ci    const data = await fetchDataWithAsyncAwait();
1454514f5e3Sopenharmony_ci  } catch (err) {
1464514f5e3Sopenharmony_ci    print('ERROR:', err);
1474514f5e3Sopenharmony_ci  }
1484514f5e3Sopenharmony_ci}
1494514f5e3Sopenharmony_ci
1504514f5e3Sopenharmony_cifetchAndLogData();
151