我有以下運算式:
const value = 10 / 2;
在 VS Code 中,如果我將滑鼠懸停在 上value,它會顯示它的型別是double,這是有道理的。但是,如果我運行以下代碼行,它們都會評估為true:
print(value is num); // true
print(value is double); // true
print(value is int); // true
num是超類,double&int是兄弟類。為什么一個值同時屬于兄弟型別和超型別?
uj5u.com熱心網友回復:
您正在為 Web 編譯,并在瀏覽器中運行。DartPad 會為您執行此操作,如果您使用 Web 編譯器(dart2js 或 dev-compiler)編譯程式,您將獲得相同的效果。
在為 web 編譯 Dart 時,所有數字都被編譯為 JavaScript 數字,因為這是獲得高效執行的唯一方法。
JavaScript 沒有整數作為單獨的型別。所有 JavaScript 數字都是 IEEE-754 雙精度浮點數,Dart 稱之為doubles。
所以,當你有一個類似 的數字時10 / 2,它會在原生 Dart 中創建一個double,它會在 web 上創建 JavaScript 數字 5.0。整數文字也是如此5。瀏覽器中只有一個“5”數字,因此整數和雙精度計算都創建相同的數字。
為了使其與型別系統保持一致,這意味著“5”是一個同時實作int了介面和double介面的值。一個小數值,比如5.5only implements double。
在本機運行時,整數和雙精度是不同的型別。

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480544.html
