对比Js和Dart数据类型,区别

Js是弱类型语言 Dart是强类型的语言(同时支持一些弱类型语言) Dart弱类型有var,Object,dynamic
( var 初始化确定类型后不可更改类型, Object 以及dynamic 可以更改类型,Object 编译阶段检查类型, 而 dynamic 编译阶段不检查类型)
声明变量
1,var关键字
dart和js都支持
2,final关键字Dart中使用
3,默认值
Js中变量的初始值是undefined ,Dart未初始化变量默认值是null(用final的话必须定义初始值)
4,类型判断
JS用typeof判断基本类型(字符串String,数值Number,布尔值Boolean,undefined),用instanceof潘丹引用类型(Object,Array,Function)
Dart用关键字is进行类型判断,返回布尔,assert生成环境忽略,debug模式开启
(var a=1; print(a is dynamic); assert(a is Object))
5,类型转换
Js除了自动抓换之外,还有类型转换方法
(Json和字符串相互转换 var str=JSON.string(obj),JSON.parse(str)。Number('2'),parseInt('2.2')...)
Dart通过Dart:convert中内置的内置的JSON解码器json.decode()进行转换
6,布尔值
Js:自动类型转化,空字符串,0,null,undefined 都为FALSE(var flag=1=='1' 输出 TRUE)
Dart:强制类型语言 不自动类型转换
7,字符串
Js:字符串拼接使用加号+,反引号`str${变量名称}`,获取长度length,返回给定位位置的字符str.charAt(1),拼接concat,截取slice(0,1),substr(0,1),substring(2)后两位,
'str'.indexOf('s')校验是否存在不存在返回-1,lastIndexOf('t')末尾开始查找,trim()删除前后空格,toLowerCase()转小写,toUpperCase()转大写,
toLocaleLowerCase(),toLocaleUpperCase()大小写针对地区写法
str.match('s')//["s", index: 0, input: "string", groups: undefined]
str.search('s') 返回字符串中第一个匹配项的索引,没有返回-1
str.replace('s','c')替换,split()分割字符串返回数组
Dart:使用前缀 r 创建 raw string,字符串内不会进行转义String str = r'haha \n breakLine' // 不换行,输出haha \n breakLine
拼接'$str 111'或'${str} 111',获取长度length,判断为空isEmpty;是否不为空isNotEmpty,assert(str.substring(0, 2))字符串切割,
substring(3)从指定index至末尾,字符串分隔split,
字符串判断:assert(str.startsWith('a'))以a开始返回布尔值,satrtsWith('a',2)从index=2判断,endsWith('c')以c结尾,contaiins('c')是否包含,
contains('a',2)从index=2开始判断
字符串替换:replaceAll("st","cc")替换所有符合的,replaceFirst("ing", "ss")只替换第一个符合的,replaceFirst("ing", "dd",5)从index=5替换第一个符合的,
replaceRange(0, 3, "z")范围替换0-3含0不含3,replaceAllMapped用方法返回值替换指定的字符串,
replaceFirstMapped("i",(Match match){return 1},5)从index=5开始 用方法返回值替换指定的字符串,
indexOf()从前往后找返回第一个符合的index,lastIndexOf('1')从后往前找返回第一个符合的索引,toLowerCase()转小写,toUpperCase()转大写,
trim()去除左右空格,trimLeft()去除左边空格,trimRight()去除右边空格,
补齐长度:var s=111,padLeft(6)剩余三位自动补齐,padRight(6,'2')111222剩余三位指定2,padLeft(2,'a')若指定长度原字符长度 返回原来的字符串
8,对象
Js:Object.keys(obj)返回对象的key组成的数组,Object.values(obj)返回对象的value组成的数组,Object.assgin()可以将源对象复制到目标对象,
obj.hasOwnProperty()判断对象中属性是否存在
Dart:var obj={'name':'7878'};var obj=Map();obj['name']='7878'
9,数组
Js:concat()连接两个新数组,arr.every(i=>i>3)检测数值元素 的每个元素是否都符合条件返回布尔值,arr.some(i=>i>3)检测是否有符合条件的值,
arr.filter(i=>i>3)检测数值元素返回条件符合所有元素数组,arr.find(i=>i=3)返回符合传入测试(函数)条件的数组元素,forEach遍历数组,
arr.join('')把数组所有元素放入字符串,arr.map(i=>i+1)通过指定函数处理数组每个元素并返回处理之后的数组,pop()删除最后一个元素返回删除的元素,push()末尾追加一个元素,
shift()删除并返回数组的第一个元素,sort()排序,toString()把数组转化字符串逗号隔开,unshift()首位添加一个元素,arr.reduce((curr,next)=>curr+next)数组相加的总和
Dart:同Js部分,forEach遍历数组,map,sort排序,every,reduce
fold用法同reduce,arr.contains(1)是否包含某个元素,arr.where((i)=>i>1)返回满足条件元素集合数组,firstWhere返回满足条件的第一个元素单个元素,
arr.singleWhere((i)=>i>2,orElse:()=>null)返回数组满足给定条件的唯一一个元素单个元素若多个抛出异常,
arr.take(2).toList()从数组取前n个元素,skip跳过数组的前n个元素,arr.from(arr1)克隆一个数组,
expand:var arr1 = [[2, 5], [7], [11, 12]];arr1.expand((i)=>i).toList();返回[2, 5, 7, 11, 12]
对每一项进行计算时类似map(),arr.map((i)=>i*8).toList();arr.add(1)像数组添加元素;addAll([1,2])像数组添加另一个数组所有元素
posted @ 2021-03-25 16:34  lxn*  阅读(267)  评论(0编辑  收藏  举报