js-运算符:https://www.yuque.com/zhuchaoyang/wrif6k/iixc9x

算数运算符

  • +-*/ 加、减、乘、除
  • %~/ 模(取余)、取整(取出小数点后边) ```dart print(1 + 2); //3 print(1 - 2); //-1 print(1 * 2); //2 print(4 / 2); //2.0 浮点数

print(10 % 7); //3 整型 print(8 ~/ 3); //2 整型

  1. <a name="tCj4j"></a>
  2. # 比较(关系)运算符
  3. - `==` 、`!=` 、`<` 、`>` 、`<=` 、`>=`
  4. ```dart
  5. print(2 == 2); //true
  6. print(2 != 2); //false
  7. print(2 < 3); //true
  8. print(2 > 3); //false
  9. print(2 <= 2); //true
  10. print(2 >= 3); //false
  11. // print('a' >= 'b'); //报错
  12. print(1 == '1'); //false
  13. print(0 == false); //false
  14. print(null == null); //true
  15. print([] == []); //false
  16. print({} == {}); //false

逻辑运算符

  • ||&&! 或、且、非
  1. // print(1 || 2); //报错
  2. print((3 > 1) || (3 < -1)); //true
  3. print((3 > 0) && (3 < 6)); //true
  4. print(!true); //false

赋值运算符

=+=-=*=/=%=~/

  1. var a = 1; print(a); //1
  2. int c1 = 10; print(c1 += 1); //11
  3. int c2 = 10; print(c2 -= 1); //9
  4. int c3 = 10; print(c3 *= 2); //20
  5. int c4 = 10; print(c4 %= 3); //1
  6. int c5 = 10; print(c5 ~/= 3); //3
  7. // int c6 = 10; print(c6 /= 1); //报错 因为除法得到的值是double
  8. double c7 = 10; print(c7 /= 2); //5.0

????=

判断对象是否为null,是null就赋值后面参数

  1. print(null ?? 1); //1
  2. var b1 = 1;
  3. b1 ??= 2; //等同于 b1 = b1 ?? 2;
  4. print(b1); //1
  5. var b2;
  6. b2 ??= 2;
  7. print(b2); //2
  8. var b3 = null;
  9. b3 ??= 2;
  10. print(b3); //2

递增++、递减—

  1. var a = 10;
  2. // ++a; a++; //把a累加一个1,相当于a = a+1
  3. // --a; a--; //把a累减一个1,相当于a = a-1
  4. var a1 = 10, a2 = 10;
  5. print('${++a1}, ${a2++}'); //11, 10
  6. print('${a1}, ${a2}'); //11, 11

前置和后置的区别: 在没有赋值操作,前置和后置是一样的。 但在赋值操作时,如果递增或递减运算符前置,那么前置的运算符会先累加或累减再赋值,如果是后置运算符则先赋值再累加或累减。

条件表达式

其实就是三元运算符
语法:条件 ? 成立执行 : 不成立执行

  1. var a = 5;
  2. var b = a > 1 ? true : false;
  3. print(b); //true
  4. // 如果三元运算符中的某一部分不需要任何处理,可以使用 null
  5. var c = a > 10 ? true : null;
  6. print(c); //null
  7. //如果赋值是基于判定是否为null,应考虑使用 ??
  8. var n = 1;
  9. var m = n ?? 2;
  10. print(m); //1

?

条件成员访问 和 . 类似,但是左边的操作对象不能为 null,
例如 foo?.bar 如果 foo 为 null 则返回 null,否则返回 bar 成员

  1. var s1 = 'a';
  2. print(s1.length); //1
  3. print(s1?.length); //1
  4. var s2;
  5. // print(s2.length); //报错
  6. print(s2?.length); //null

isis!as 类型判断、类型转换

is 判断是否是某个类型,返回true或者false。
as 是类型转换,其相当于 :先检测 其是不是,然后再调用的一种简写。但是还不是完全一致,当不是的时候,as 会抛出exception。

  1. print(1 is int); //true
  2. print(1 is! int); //false
  3. var m1 = {};
  4. if (m1 is Map) {
  5. m1['age'] = 18;
  6. }
  7. print(m1); //{age: 18}
  8. // 简写为:
  9. var m2 = {};
  10. (m2 as Map)['age'] = 18;
  11. print(m2); //{age: 18}