目录

像大多数语言一样,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);

dart之旅(二)- 内建类型的更多相关文章

  1. python高级编程之(类级):子类内建类型

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一( ...

  2. 零基础学python-4.2 其它内建类型

    这一章节我们来聊聊其它内建类型 1.类型type 在python2.2的时候,type是通过字符串实现的,再后来才把类型和类统一 我们再次使用上一章节的图片来说明一些问题 我们通过对照上面的图片.在p ...

  3. proto3 不支持内建类型的非空判断即 hasXXX

    proto3 移除了内建类型的非空判断方法 即代码生成工具不会为 bool int 等类型生成has方法 有使用过proto2 或者其它rpc 框架的人都知道使用has 方法去判断消息里的值是否设置, ...

  4. [golang note] 内建类型

    基础类型 √ golang内建基础类型有布尔类型.整数类型.浮点类型.复数类型.字符串类型.字符类型和错误类型. 复合类型 √ golang支持的复合类型有指针.数组.数组切片.字典.通道.结构体和接 ...

  5. 内建类型,与用户自定义类型,返回值为const

    1对内建类型来说,按值返回的是否为const,是无关紧要的,因为编译器已经不让它成为一个坐直,因为它总是一个值,而不是一个变量(thing in c++ page192) 2当处理用户自定义的类型时, ...

  6. python 内建类型

    ''' 数值 numbers 字符串 strings 列表 lists 字典 dictionaries 元组 tuples 文件 files 集合 sets ''' 1.1 序列的操作 所有序列类型都 ...

  7. [python学习篇][书籍学习][python standrad library][内建类型]之数值

    数值类型 — int, float, long, complex 有四种不同的数值类型:普通整数.长整数.浮点数和复数 普通整数(或者简称整数)使用C中的long实现,其精度至少为32位(sys.ma ...

  8. 12.Python提供了哪些内建类型

    There are mutable and Immutable types of Pythons built in types Mutable built-in types: List Set Dic ...

  9. [python学习篇][书籍学习][python standrad library][内建类型]迭代器类型

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...

随机推荐

  1. java基础 ------- 多重循环 and break与continue

    -----  什么是多重循环 ----   打印数列 public class ForEx { public static void main(String[] args){ for(int i = ...

  2. [leetcode]38. Count and Say数数

    The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 ...

  3. java重写equals方法需要注意的几点

    为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...

  4. spring入门——applicationContext与BeanFactory的区别

    我们知道从applicationContext容器对象中如何获取Bean了,其实spring框架还有另外一种获取bean的方法:BeanFactory代码如下: BeanFactory factory ...

  5. jquery 表单校验

    <link type="text/css" href="<%=basepath%>css/form/validate.css" rel=&qu ...

  6. SpringMVC学习 十三 拦截器栈

    拦截器栈:就是有多个拦截器同时拦截相同的控制器(controller)请求,这写拦截器就构成了拦截器栈. 栈的特点是先进后出,在拦截器栈中也是如此,如果先执行了preHandle方法,也就是意味着先进 ...

  7. Java集合:LinkedList源码解析

    Java集合---LinkedList源码解析   一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据re ...

  8. 2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)

    传送门 题意:支持单点修改,维护子树里的最大连通子块和. 思路: 扯皮: bzojbzojbzoj卡常差评. 网上的题解大多用了跟什么最大子段和一样的转移方法. 但是我们实际上是可以用矩阵转移的传统d ...

  9. Android开发之Activity

    活动(Activity) 活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户交互. FirstActivity 手动创建活动 新建一个project,不再选择empty act ...

  10. zookeeper学习day01

    1.zkAPI:(借助闭锁来实现)    1)创建闭锁对象  2)创建zk对象  3)连接zk客户端(连接成功执行countDown方法)  4)执行await方法(保证链接成功) 5)zk对象调用对 ...