Dart
中未显示初始化的变量或字段,会自动被初始化为null
弱类型
编译的时候根据值来明确类型
在
Dart
里面,一切皆对象,而且这些对象的父类都是Object
var
:如果没有初始化,则可以变成任意类型;一旦初始化值,后续便不能修改变量类型
dart
var a;
var b = 'hello';
b = 123; // IDE报错,不能修改变量类型
a = '煎蛋';
a = 123;
a = true;
a = ['煎蛋', 123, true];
a = {123: '煎蛋'};
print(a); // {123: 煎蛋}
Object
:动态任意类型
dart
Object a = 'hello';
a = '煎蛋';
a = 123;
a = true;
a = ['煎蛋', 123, true];
a = {123: '煎蛋'};
a.p(); // IDE报错,不能调用Object不存在的方法
print(a); // {123: 煎蛋}
dynamic
:动态任意类型。这个类型在告诉编译器不需要做类型检测,由开发者通过代码上下文来进行约束,类似Typescript
中的any
dart
dynamic a = 'hello';
a = '煎蛋';
a = 123;
a = true;
a = ['煎蛋', 123, true];
a = {123: '煎蛋'};
a.p(); // 运行时才会报错
print(a); // {123: 煎蛋}
强类型
声明后,变量类型被锁定
dart
String a;
a = 123; // IDE报错,变量类型已被锁定,不能修改
a = 'hello';
print(a); // hello