目錄
像大多數語言一樣,dart 也提供了 number,string,boolean 等類型,包括以下幾種:
- numbers
- strings
- booleans
- lists (also known as arrays)
- maps
- runes (for expressing Unicode characters in a string)
- symbols
這幾種內建類型的特點之一是你可以使用字面量來創建一個相應的對象。你也可以使用構造函數來初始化這些對象,除了 number 和 boolean,因為這兩個類型沒有對應的構造函數。
number 類型
number 類型包含 int 和 float 類型,int 在 dart 的 VM 環境下,取值范圍在 - 263 到 263-1 之間。如果需要轉為 js,范圍為 js 的范圍,-253 到 253-1。代碼示例如下:
import 'dart:math';
main(List<String> args) {
int a = 2;
int a1 = 2.0; // 報錯
double b = 2.0;
double b1 = 2; //dart2.1 會自動轉換,之前的版本會報錯
var c = 0x111; // 支持 16 進制表示
print(pow(2, 65)); // 打印出 0 超出數字范圍
}
將數字轉換為字符串可以使用數字的 toString 方法,將字符串轉換為數字可以使用字符串的 parse 方法。這點和 js 相比,js 借助隱式類型轉換可以更靈活的轉換數字和字符串。
// 數字轉字符串
print(2.toString());
print(2.5333.toString());
print(2.5333.toStringAsFixed(2));//2.50 保留幾位小數
print(2.5333.toStringAsExponential(2));// 科學計數法
print(2.5333.toStringAsPrecision(8));//2.5333000
// 字符串轉數字
print(int.parse('1'));
print(double.parse('2'));
在運算上,數字支持常用的四則運算,此外 dart 提供了一個 math 包來支持更復雜的運算。
字符串
在語法上,dart 的字符串的字面量語法和 python 的語法更為接近,比如可以選擇使用單引號和雙引號,或者使用三個雙引號表示多行字符串。以下都是合法的字符串表示形式:
var s1 = 'hhh';
var s2 = "'11'";
var s3 = '111'
"222";
var s4 = """222
333
2222""";
除了字面量語法,你還可以使用以下構造函數來生成一個字符串:
String.fromCharCode(65);//A
String.fromCharCodes();//"A-!"
在字符串的方法上,與 js 的字符串很類似,甚至部分代碼可以直接拷到 js 中執行。下面是關於 dart 字符串方法的一個例子,更詳細的文檔可以看 這里
// 長度
'1234'.length; //4
// 取子串
'1234'.substring(1,2);
// 取 unicode 值
print('123456'.codeUnitAt(1)); //js 中的 charCodeAt()
// 判斷某個字符串是不是以某子串開始或結束
'123456⚠️'.startsWith('12'); //js 相同
'123456⚠️'.endsWith('⚠️'); //js 相同
// replace
'112'.replaceAll('1', 'x');// 'xx2' 全部替換
'112'.replaceFirst('1', 'x');// 'x12' 只替換第一個
//split
print('1234561'.split('3')); // 同 js
// trim,trimLeft,trimRight 修剪兩邊,左邊,右邊的空格,同 js
print('1234561'.trim());
//contains
print('1234561'.contains('8')); //false 判斷字符串是否包含某個子串
// indexOf,lastIndexOf, 獲取某個字串第一次出現和最后出現的位置。同 js,沒有返回 - 1
print('1234561'.indexOf('9'));// -1
// padLeft,padRight 同 js 的 padStart 和 padEnd
print('1234561'.padLeft(9, '0'));//001234561
print('1234561'.padEnd(9, '0'));//123456100
// toUpperCase,toLowerCase 同 js
print('x'.toUpperCase());
print('X'.toLowerCase());
dart也支持模板字符串,使用方法和js的基本相同,但是當你要放入模板字符串的是一個變量時,甚至可以省略花括號,如下面的$string
所示:
string = 'dartlang';
'$string has ${string.length} letters'; // 'dartlang has 8 letters'
字符串全部的方法可以參考api文檔。
布爾類型
布爾類型有兩種值,true 和false。值得注意的是,由於dart是一種類型安全的語言,沒有js中的隱式轉換,你不能寫!0
這樣的代碼,也不可以在if語句中這樣判斷。邏輯運算符也只接受布爾類型的操作數。
print(true);
print(false);
print(!true);
print(true && false);
print(true || false);