dynamic 表示是動態的,數據類型是指任意類型
var a; a = 10; a = "Dart"; print(a); dynamic b = 20; b = "JavaScript"; print(b); print(b.runtimeType); var list = new List<dynamic>(); list.add(1); list.add("hello"); list.add(true); print(list); print("\n"); dynamic x ='hal'; print(x.runtimeType);//數據類型 print(x); x = 123; print(x.runtimeType); print(x); var a1 = 'var'; print(a1.runtimeType); print(a1); // Object Object o1 ='111'; print(o1.runtimeType); print(o1); o1.toString(); print(o1);
輸出:
Dart JavaScript String [1, hello, true] String hal int 123 String var String 111 111
dynamic、var、object 三種類型的區別
dynamic:所有dart 對象的基礎類型,在大多數情況下,不直接使用它
通過它定義的變量會關閉類型檢查,這意味着 dynamix x= 'hi'; x.foo();
這段代碼靜態類型檢查不會報錯,但是運行時會crash,因為x 並沒有foo() 方法,所以建議大家在編程時不要直接使用dynamic;
var: 是一個關鍵字,意思是"我不關心這里的類型是什么",系統會自動判斷類型 runtimeType;
object: 是Dart 對象的基類,當你定義: object o =xxx ;時這個時候系統會認為o 是個對象,你可以調用o的toString()和hashCode()方法
因為Object 提供了這些方法,但是如果你嘗試調用o.foo()時,靜態類型檢查會運行報錯。
綜上,dynamic 與object 的最大的區別是在靜態類型檢查上。
Dart學習系列文章:https://www.cnblogs.com/jukaiit/category/1636484.html