在 ArkTS 中,运算符是构建表达式和执行计算的关键元素。以下是对各种运算符的详细介绍,并附带案例演示。
一、赋值运算符
(一)基本赋值运算符(=)
基本赋值运算符 “=” 用于将右侧的值赋给左侧的变量。例如:
let x: number;
let y = 5;
x = y;
console.log(x); // 输出 5
(二)复合赋值运算符
复合赋值运算符将赋值与其他运算符组合在一起。形式为 “x + = y” 等同于 “x = x + y”。以下是复合赋值运算符的介绍:
- +=
let a = 3;
a += 2; // 等同于 a = a + 2
console.log(a); // 输出 5
- -=
let b = 7;
b -= 3; // 等同于 b = b - 3
console.log(b); // 输出 4
- *=
let c = 2;
c *= 4; // 等同于 c = c * 4
console.log(c); // 输出 8
- /=
let d = 10;
d /= 2; // 等同于 d = d / 2
console.log(d); // 输出 5
- %=
let e = 11;
e %= 3; // 等同于 e = e % 3
console.log(e); // 输出 2
- <<=、>>=、>>>=、&=、|=、^=(位运算相关复合赋值运算符,下面位运算符部分详细介绍用法)
二、比较运算符
(一)严格相等运算符(===)
严格相等运算符 “===” 只有当两个操作数类型相同且值相等时才返回 true
,不同类型的操作数被认为是不相等的。例如:
console.log(5 === 5); // 输出 true
console.log(5 === '5'); // 输出 false,因为类型不同
(二)严格不相等运算符(!==)
严格不相等运算符 “!==” 当两个操作数类型不同或者值不相等时返回 true
。例如:
console.log(5!== '5'); // 输出 true
console.log(5!== 5); // 输出 false
(三)相等运算符(==)
相等运算符 “==” 在比较时会进行类型转换,如果转换后的值相等则返回 true
。不过在实际编程中,更推荐使用 “===”,因为 “==” 可能会导致一些不易察觉的类型转换问题。例如:
console.log(5 == '5'); // 输出 true,这里会将字符串 '5' 转换为数字 5 后比较
(四)不相等运算符(!=)
不相等运算符 “!=” 与 “==” 相反,如果转换后的值不相等则返回 true
。例如:
console.log(5!= 6); // 输出 true
(五)大于(>)、大于等于(>=)、小于(<)、小于等于(<=)运算符
这些运算符用于比较两个操作数的大小关系。例如:
console.log(7 > 3); // 输出 true
console.log(7 >= 7); // 输出 true
console.log(3 < 7); // 输出 true
console.log(3 <= 3); // 输出 true
三、算术运算符
(一)一元运算符
- 负号(-)和正号(+)
- 负号用于改变操作数的符号,正号一般不改变操作数的值,但在某些情况下用于强调操作数是正数。例如:
let num = 5;
console.log(-num); // 输出 -5
console.log(+num); // 输出 5
- 自增(++)和自减(--)运算符
- 自增和自减运算符有前置和后置两种形式。前置形式(++x、--x)先对变量进行自增或自减操作,然后返回新的值;后置形式(x++、x--)先返回变量的当前值,然后再对变量进行自增或自减操作。例如:
let i = 3;
console.log(++i); // 输出 4,i 的值现在是 4
let j = 3;
console.log(j++); // 输出 3,j 的值现在是 4
(二)二元运算符
- 加法(+)
console.log(2 + 3); // 输出 5
let str = 'Hello, ';
console.log(str + 'world'); // 输出 Hello, world,字符串拼接
- 减法(-)
console.log(5 - 3); // 输出 2
- 乘法(*)
console.log(4 * 3); // 输出 12
- 除法(/)
console.log(10 / 2); // 输出 5
- 取余(%)
console.log(11 % 3); // 输出 2
四、位运算符
(一)按位与(&)
按位与运算符 “a & b”,如果两个操作数的对应位都为 1,则将这个位设置为 1,否则设置为 0。例如:
let num1 = 5; // 二进制为 0101
let num2 = 3; // 二进制为 0011
console.log(num1 & num2); // 输出 1,因为 0101 & 0011 = 0001
(二)按位或(|)
按位或运算符 “a | b”,如果两个操作数的相应位中至少有一个为 1,则将这个位设置为 1,否则设置为 0。例如:
let num3 = 5; // 二进制为 0101
let num4 = 3; // 二进制为 0011
console.log(num3 | num4); // 输出 7,因为 0101 | 0011 = 0111
(三)按位异或(^)
按位异或运算符 “a ^ b”,如果两个操作数的对应位不同,则将这个位设置为 1,否则设置为 0。例如:
let num5 = 5; // 二进制为 0101
let num6 = 3; // 二进制为 0011
console.log(num5 ^ num6); // 输出 6,因为 0101 ^ 0011 = 0110
(四)按位非(~)
按位非运算符 “~ a” 反转操作数的位。例如:
let num7 = 5; // 二进制为 0101
console.log(~num7); // 输出 -6,~0101(补码形式)= 1010(原码为 -6)
(五)左移(<<)
左移运算符 “a << b” 将 a 的二进制表示向左移 b 位,右边补 0。例如:
let num8 = 1; // 二进制为 0001
console.log(num8 << 2); // 输出 4,因为 0001 << 2 = 0100
(六)算术右移(>>)
算术右移运算符 “a>> b” 将 a 的二进制表示向右移 b 位,带符号扩展。例如:
let num9 = -8; // 二进制为 11111000(补码形式)
console.log(num9 >> 2); // 输出 -2,因为 11111000 >> 2 = 11111110(补码形式,原码为 -2)
(七)逻辑右移(>>>)
逻辑右移运算符 “a>>> b” 将 a 的二进制表示向右移 b 位,左边补 0。例如:
let num10 = -8; // 二进制为 11111000(补码形式)
console.log(num10 >>> 2); // 输出 1073741822,因为 11111000 >>> 2 = 00111110(无符号数)
五、逻辑运算符
(一)逻辑与(&&)
逻辑与运算符 “a && b”,当 a 和 b 都为 true
时返回 true
,只要有一个为 false
则返回 false
。并且,当计算到 a 为 false
时,不会再计算 b。例如:
let bool1 = true;
let bool2 = false;
console.log(bool1 && bool2); // 输出 false
console.log((3 > 5) && (5 > 3)); // 输出 false,只计算了 3 > 5 就得出结果
(二)逻辑或(||)
逻辑或运算符 “a || b”,当 a 和 b 至少有一个为 true
时返回 true
,只有当 a 和 b 都为 false
时才返回 false
。并且,当计算到 a 为 true
时,不会再计算 b。例如:
let bool3 = true;
let bool4 = false;
console.log(bool3 || bool4); // 输出 true
console.log((3 > 2) || (5 > 7)); // 输出 true,只计算了 3 > 2 就得出结果
(三)逻辑非(!)
逻辑非运算符 “! a” 用于对操作数取反,当 a 为 true
时返回 false
,当 a 为 false
时返回 true
。例如:
let bool5 = true;
console.log(!bool5); // 输出 false
通过对这些运算符的详细了解和案例演示,我们可以在 ArkTS 编程中更灵活地处理数据和实现各种逻辑。