Flutter 前端秒入门,Dart 与 JavaScript 快速对照表
基础类型、概念对照表
类型/概念 |
JavaScript 示例 |
Dart 示例 |
数字 |
let num = 100; |
int num = 100; |
字符串 |
let str = "Hello World"; |
String str = 'Hello World'; |
布尔值 |
let flag = true; |
bool flag = true; |
对象 |
let obj = {key: "value"}; |
Map<String, dynamic> obj = {'key': 'value'}; |
数组 |
let arr = [1, "2", true]; |
List arr = [1, '2', true]; |
函数 |
function hellow() {} |
void hellow() {} |
空值 |
let nothing = null; |
Null nothing = null; |
未定义 |
let undef; |
Dart 没有 "undefined" 概念,空值用 null |
正则表达式 |
let regex = /ab+c/; |
RegExp regex = RegExp('ab+c'); |
日期 |
let date = new Date(); |
DateTime date = DateTime.now(); |
错误 |
let error = new Error('Error msg'); |
Exception error = Exception('Error msg'); |
Promise (异步) |
let promise = new Promise(); |
Future promise = Future(() {}); |
类 |
class MyClass {} |
class MyClass {} |
Set (集合) |
let set = new Set(); |
Set set = Set(); |
Map (映射) |
Object、Map |
Map<K, V> map = Map(); |
Symbol |
let sym = Symbol('s'); |
Symbol sym = Symbol('s'); |
基础语法对照表
功能 |
JavaScript |
Dart |
打印输出 |
|
|
变量声明 |
|
|
类型声明 |
|
|
函数定义 |
|
|
箭头函数 |
|
|
类定义 |
|
|
类继承 |
|
|
接口 |
|
|
异步编程 |
|
|
模块导入 |
|
|
错误处理 |
|
|
泛型 |
|
|
映射(字典/对象) |
|
|
列表(数组) |
|
|
解构赋值 |
|
|
展开运算符 |
|
|
空值检查 |
|
|
条件属性访问 |
|
|
字符串模板 |
|
|
块作用域 |
|
|
类型转换 |
|
|
类型检查 |
|
|
多行字符串 |
|
|
js 数组 -> dart 列表 功能对比
JavaScript 在Dart中通常称为列表,下面是一些常见的数组功能及其在 JavaScript 和 Dart中的对比。
功能 |
JavaScript |
Dart |
创建数组/列表 |
|
|
获取长度 |
|
|
添加元素 |
|
|
合并数组/列表 |
|
|
遍历元素 |
|
|
映射转换 |
|
|
过滤元素 |
|
|
查找元素 |
|
|
排序 |
|
|
判断所有元素 |
|
|
判断任一元素 |
|
|
累加元素 |
|
|
查找索引 |
|
|
删除元素 |
|
|
插入元素 |
|
|
复制数组/列表 |
|
|
多维数组/列表 |
|
|
数组/列表解构 |
|
|
数组/列表扁平化 |
|
|
在实际应用中,Js 和 Dart 都有自己的库和框架来提供更高级的数据处理功能,如 Js 中的 Lodash 和 Dart 里的 collection。
js 对象 -> dart Map 功能对比
在JavaScript中,对象用于存储键值对。Dart中类似的概念称为Map。JavaScript 对象和 Dart Map 的功能对比。
功能 |
JavaScript |
Dart |
创建对象/Map |
|
|
添加键值对 |
|
|
获取值 |
|
|
删除键值对 |
|
|
遍历键值对 |
|
|
获取所有键 |
|
|
获取所有值 |
|
|
检查键存在 |
|
|
复制对象/Map |
|
|
合并对象/Map |
|
|
键值对数量 |
|
|
清空对象/Map |
|
|
对象解构 |
|
|
注意点:
Dart的Map可以有任意类型的键。
Dart没有原型链的概念。
在 JS 中,对象经常用于定义具有方法和属性的自定义类型,而在 Dart 中,一般使用的是类来做。
异步
JavaScript和Dart都支持异步编程,语法略微不同。
JavaScript 的异步处理
在JavaScript中,异步编程最初是通过回调函数实现的。随后,Promises被引入以简化异步操作的链式调用,并解决回调地狱(callback hell)的问题。async/await
是建立在Promises之上的语法糖,使异步代码看起来像同步代码。
回调函数
function greet(name, callback) {
console.log('Hello, ' + name);
callback();
}
greet('John', function() {
console.log('回调执行');
});
Promises
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Result');
}, 1000);
})
.then(result => console.log(result))
.catch(error => console.error(error));
async/await
async function asyncFunction() {
try {
const result = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hello world');
}, 1000);
});
console.log(result);
} catch (error) {
console.error(error);
}
}
Dart 的异步处理
Dart语言支持异步处理的方式与JavaScript类似,但有其自己的一些特性。Dart使用Future
和Stream
来处理异步操作。Future
类似于 JavaScript 中的 Promise,而Stream
用于处理一系列异步事件。Dart 也支持async
和await
关键字。
使用 Future
Future<String> fetchData() {
// 模拟异步请求
return Future.delayed(Duration(seconds: 2), () => 'Fetched Data');
}
void main() {
fetchData().then((data) {
print(data);
}).catchError((error) {
print(error);
});
}
使用 async/await
Future<String> fetchData() {
// 模拟异步请求
return Future.delayed(Duration(seconds: 2), () => 'Fetched Data');
}
Future<void> printData() async {
try {
var data = await fetchData();
print(data);
} catch (error) {
print(error);
}
}
void main() {
printData();
}
主要差异点
● JavaScript 使用 Promises 和 async/await,而 Dart 使用 Future 和 async/await,使用起来对于我们来说没啥差别
● Dart 的错误处理在异步代码中使用 try/catch 与同步代码一致,而 JavaScript 的 Promises 需要使用 .catch() 或在async函数中使用 try/catch。
包管理
JavaScript 中常使用 npm 作为包管理工具,在项目根目录 package.json 中声明依赖。
Dart 使用 Pub 包管理工具,在项目根目录的 pubspec.yaml 文件中声明依赖项 。
版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/2713/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论