目录
ArkTS基本概念
ArkTS是HarmonyOS生态的应用开发语言。
- ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。
- 它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。
- 针对JS/TS并发能力支持有限的问题ArkTS对并发编程API和能力进行了增强。
- ArkTS支持与TS/JS高效互操作,兼容TS/JS生态。ArkTS和 TS 以及 JS 的关系
ArkTS和 TS 以及 JS 的关系
- JS: JavaScript,常用于网页开发,页面的效果
- TS: TypeScript,微软开发的,比 JS 多了类型系统
- ArkTS: JS、TS能用的,他 基本 都能用,写 UI
- 注意:看文档的时候,可能需要去 JS 的文档,TS 的文档找一部分的内容
ArkTS基础知识
1 声明
ArkTS通过声明引入变量、常量、函数和类型
ArkTS中可以通过关键字 let 声明变量 ,关键字 const 声明常量,并通过类型注释指定类型
1.1变量声明
以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。
//变量声明
let count: number = 0
console.log('count -----> ', count)
1.2常量声明
以关键字const开头的声明引入只读常量,该常量只能被赋值一次。
Cannot assign to ‘count‘ because it is a constant. <ArkTSCheck>-CSDN博客
//常量声明
const count: number = 0
console.log('count -----> ', count)
1.3自动类型推断
由于ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定。
但是,如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。ArkTS规范中列举了所有允许自动推断类型的场景。
以上图片没有指定类型,但是下面count报错,是因为count给了123,系统自动推断为number类型,但是log里面只接收string类型,所以报错
这里给上两个双引号就没有报错了,是因为系统判定为了string类型,与log需要的类型相吻合,所以没有报错
2 类型
类型分为基本类型、引用类型、枚举类型、联合类型、类型别名等
2.1 基本类型
2.1.1 string
string代表字符序列;可以使用转义字符来表示字符。
字符串字面量由单引号(')或双引号(")之间括起来的零个或多个字符组成。字符串字面量还有一特殊形式,是用反向单引号(`)括起来的模板字面量。
//string类型
let s1 = 'Hi' //单
let s2 = "Hi"//双
let a = 'a'
let s3 = `Hi${a}` //反
注意 String !== string
Type ‘String‘ is not assignable to type ‘ResourceStr‘. <ArkTSCheck>-CSDN博客
2.1.2 number
ArkTS提供number和Number类型,任何整数和浮点数都可以被赋给此类型的变量。
数字字面量包括整数字面量和十进制浮点数字面量。
整数字面量包括以下类别:
- 由数字序列组成的十进制整数。例如:0、117、-345
- 以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7
- 以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777
- 以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11
浮点字面量包括以下:
- 十进制整数,可为有符号数(即,前缀为“+”或“-”);
- 小数点(“.”)
- 小数部分(由十进制数字字符串表示)
- 以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。
//number类型
let s1 = 1 //整数
let s2 = 1.2 //浮点
2.1.3 boolean
boolean类型由true和false两个逻辑值组成。
//boolean类型
let isTrue = true
2.2 引用类型
2.2.1 Object类型
Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。
let obj: Object = { name: '张三', age: 20 };
2.2.2 Array类型
array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象。
数组可由数组复合字面量(即用方括号括起来的零个或多个表达式的列表,其中每个表达式为数组中的一个元素)来赋值。数组的长度由数组中元素的个数来确定。数组中第一个元素的索引为0。
// 数字数组
let numberArray: number[] = [1, 2, 3, 4, 5];
// 字符串数组
let stringArray: string[] = ['苹果', '香蕉', '橙子'];
// 混合类型数组
let mixedArray: (number | string)[] = [1, 'two', 3, 'four'];
2.2.3 Void类型
void类型用于指定函数没有返回值。
此类型只有一个值,同样是void。由于void是引用类型,因此它可以用于泛型类型参数。
//Void类型
class Person<T> {
//....
}
let instance: Person<void>
2.3 枚举类型 Enum
enum类型,又称枚举类型,是预先定义的一组命名值的值类型,其中命名值又称为枚举常量。
使用枚举常量时必须以枚举类型名称为前缀。
enum Color {
Red = '红色',
Green = '绿色',
Blue = '蓝色'
}
let myColor: Color = Color.Red;
console.log(myColor);
2.4 联合类型 Union
union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型。
let myValue: string | number;
myValue = "Hello";
myValue = 123;
2.5 类型别名 Aliases
Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。可以使用 type
关键字来创建类型别名(Aliases)。以下是一个示例:
type PersonInfo = {
name: string,
age: number
};
let person: PersonInfo = {
name: "张三",
age: 25
};
2.6 空安全
一般来说,有时会存在声明变量时不确定初始值。在这类情况下,通常使用联合类型包含null值
这里写了六种解决办法,我就不在这里写了,偷点懒
2.7 类型安全与类型判断
ArkTS是类型安全的语言,编辑器会进行类型检查,实时提示错误信息
ArkTS支持自动类型推导,没有指定类型时,ArkTS支持使用类型推断自动选择合适的类型
3 运算符
3.1 赋值运算符
赋值运算符=,使用方式如x=y。
let x = 5
x = y
复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y。
在 “x op = y 等于 x = x op y” 这个表述中,“op” 代表操作符(operator),它可以是诸如 “+”(加法)、“-”(减法)、“*”(乘法)、“/”(除法)等等的各种算术或位运算操作符。
复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。
let x = 5;
// +=
x += 3;
console.log(x);
// -=
x -= 2;
console.log(x);
// *=
x *= 2;
console.log(x);
// /=
x /= 4;
console.log(x);
// %=
x %= 3;
console.log(x);
// <<=
x <<= 2;
console.log(x);
// >>=
x >>= 1;
console.log(x);
// >>>=
x >>>= 1;
console.log(x);
// &=
x &= 7;
console.log(x);
// |=
x |= 8;
console.log(x);
// ^=
x ^= 9;
console.log(x);
3.2 比较运算符
运算符 | 说明 |
---|---|
=== | 如果两个操作数严格相等(不同类型的操作数是不相等的),则返回true。 |
!== | 如果两个操作数严格不相等(不同类型的操作数是不相等的),则返回true。 |
== | 如果两个操作数相等(尝试先转换不同类型的操作数,再进行比较),则返回true。 |
!= | 如果两个操作数不相等(尝试先转换不同类型的操作数,再进行比较),则返回true。 |
> | 如果左操作数大于右操作数,则返回true。 |
>= | 如果左操作数大于或等于右操作数,则返回true。 |
< | 如果左操作数小于右操作数,则返回true。 |
<= | 如果左操作数小于或等于右操作数,则返回true。 |
let num1 = 5;
let num2 = 10;
let str1 = '5';
// ===
console.log(num1 === num2);
console.log(num1 === parseInt(str1));
//!==
console.log(num1!== num2);
console.log(num1!== parseInt(str1));
// ==
console.log(num1 == num2);
console.log(num1 == str1);
//!=
console.log(num1!= num2);
console.log(num1!= str1);
// >
console.log(num2 > num1);
// >=
console.log(num2 >= num1);
console.log(num1 >= parseInt(str1));
// <
console.log(num1 < num2);
// <=
console.log(num1 <= num2);
console.log(num1 <= parseInt(str1));
3.3 算术运算符
一元运算符为-、+、--、++。
let num = 5;
// 正号 +
let positive = +num;
console.log(positive);
// 负号 -
let negative = -num;
console.log(negative);
// 自增 ++
num++;
console.log(num);
// 先使用后自增
let beforeIncrement = num++;
console.log(beforeIncrement);
console.log(num);
// 自减 --
num--;
console.log(num);
// 先使用后自减
let beforeDecrement = num--;
console.log(beforeDecrement);
console.log(num);
// 先自增后使用
let afterIncrement = ++num;
console.log(afterIncrement);
console.log(num);
// 先自减后使用
let afterDecrement = --num;
console.log(afterDecrement);
console.log(num);
二元运算符列举如下:
运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 除法后余数 |
let num1 = 10;
let num2 = 3;
// 加法
let sum = num1 + num2;
console.log(`加法:${num1} + ${num2} = ${sum}`);
// 减法
let difference = num1 - num2;
console.log(`减法:${num1} - ${num2} = ${difference}`);
// 乘法
let product = num1 * num2;
console.log(`乘法:${num1} * ${num2} = ${product}`);
// 除法
let quotient = num1 / num2;
console.log(`除法:${num1} / ${num2} = ${quotient}`);
// 取余
let remainder = num1 % num2;
console.log(`取余:${num1} % ${num2} = ${remainder}`);
3.4 位运算符
运算符 | 说明 |
---|---|
a & b | 按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。 |
a | b | 按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0。 |
a ^ b | 按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。 |
~ a | 按位非:反转操作数的位。 |
a << b | 左移:将a的二进制表示向左移b位。 |
a >> b | 算术右移:将a的二进制表示向右移b位,带符号扩展。 |
a >>> b | 逻辑右移:将a的二进制表示向右移b位,左边补0。 |
let a = 5; // 二进制: 0101
let b = 3; // 二进制: 0011
// 按位与
let andResult = a & b;
console.log(`按位与: ${a} & ${b} = ${andResult}`); // 0001
// 按位或
let orResult = a | b;
console.log(`按位或: ${a} | ${b} = ${orResult}`); // 0111
// 按位异或
let xorResult = a ^ b;
console.log(`按位异或: ${a} ^ ${b} = ${xorResult}`); // 0110
// 按位非
let notResult = ~a;
console.log(`按位非: ~${a} = ${notResult}`); // -6 (二进制: 1010)
// 左移
let leftShiftResult = a << 2;
console.log(`左移: ${a} << 2 = ${leftShiftResult}`); // 20 (二进制: 10100)
// 算术右移
let arithmeticRightShiftResult = a >> 1;
console.log(`算术右移: ${a} >> 1 = ${arithmeticRightShiftResult}`); // 2 (二进制: 0010)
// 逻辑右移
let logicalRightShiftResult = a >>> 1;
console.log(`逻辑右移: ${a} >>> 1 = ${logicalRightShiftResult}`); // 2 (二进制: 0010)
3.5 逻辑运算符
运算符 | 说明 |
---|---|
a && b | 逻辑与 |
a || b | 逻辑或 |
! a | 逻辑非 |
let a = true;
let b = false;
// 逻辑与
let andResult = a && b;
console.log(`逻辑与: ${a} && ${b} = ${andResult}`);
// 逻辑或
let orResult = a || b;
console.log(`逻辑或: ${a} || ${b} = ${orResult}`);
// 逻辑非
let notResult =!a;
console.log(`逻辑非:!${a} = ${notResult}`);
4 语句
- 表达式: 可以被求值的代码,并将其计算出一个结果
- 语句: 一段可以执行的代码,是一个行为,例如分 支语句和循环语句
3.1 if语句
if
语句用于根据给定的条件来决定程序的执行流程。它允许程序在条件为真时执行特定的代码块,在条件为假时可以选择执行其他代码块(如 else
部分)或者不执行任何操作。
通过使用 if
语句,程序能够根据不同的情况做出不同的响应和处理,从而实现更灵活和智能的逻辑控制,使程序能够根据输入或计算得到的条件来决定执行不同的操作路径,增加了程序的动态性和适应性。
let num = 5;
if (num > 10) {
console.log('数字大于 10');
}
3.1.1 if-else 语句
// if-else 语句
let num = 5;
if (num > 10) {
console.log('数字大于 10');
} else {
console.log('数字小于或等于 10');
}
3.1.2 if-else if-else 语句
// if-else if-else 语句
let grade = 85;
if (grade >= 90) {
console.log('优秀');
} else if (grade >= 80) {
console.log('良好');
} else if (grade >= 70) {
console.log('中等');
} else if (grade >= 60) {
console.log('及格');
} else {
console.log('不及格');
}
3.2 switch语句
switch
语句用于基于不同的条件执行不同的代码块。
let day = 3; // 假设 1 代表星期一,2 代表星期二,以此类推
switch (day) {
case 1:
console.log('星期一');
break;
case 2:
console.log('星期二');
break;
case 3:
console.log('星期三');
break;
case 4:
console.log('星期四');
break;
case 5:
console.log('星期五');
break;
case 6:
console.log('星期六');
break;
case 7:
console.log('星期日');
break;
default:
console.log('无效的日期');
}
3.3 for语句
它可以用于遍历数组、执行固定次数的操作、处理具有一定规律的数据等。通过灵活控制循环的起始值、结束条件和迭代步长,能够有效地处理各种需要重复执行相同或相似操作的情况,从而提高代码的效率和简洁性。
for(let i = 0; i < 5; i++) {
console.log(i);
}
3.3.1 for-of 语句
let arr = [10, 20, 30, 40, 50];
for(let num of arr) {
console.log(num);
}
3.4 while语句
while
语句用于创建一个只要指定条件为真就会执行的循环。
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
3.4.1 do-while 语句
let i = 0;
do {
console.log(i);
i++;
} while (i < 5);
3.5 break语句
break
语句用于跳出循环结构(如 for
、while
、do-while
)或 switch
语句。
for(let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}
3.6 return语句
return
语句用于从函数中返回一个值并结束函数的执行。
function add(a, b) {
return a + b;
}
let result = add(3, 5);
console.log(result);
3.7continue语句
continue
语句用于跳过当前循环的本次迭代,直接开始下一次迭代。
for(let i = 0; i < 10; i++) {
if (i % 2 === 0) {
continue;
}
console.log(i);
}
3.8Throw和Try语句
try
和 catch
语句用于处理可能出现的异常情况。throw
语句用于抛出一个自定义的异常。
try {
let num = parseInt("abc");
} catch (error) {
throw "无法将 'abc' 转换为数字";
}
3.8.1 finally 语句
try-catch-finally
结构中的 finally
语句块无论是否发生异常都会被执行。
try {
// 可能会抛出异常的代码
let num = parseInt("not a number");
} catch (error) {
// 处理异常的代码
console.error("发生错误: " + error);
} finally {
// 无论是否有异常都会执行的代码
console.log("这部分始终会执行");
}
标签:语句,ArkTS,console,log,--,运算符,HarmonyOS,let,类型
From: https://blog.csdn.net/hqy1989/article/details/142249267