ES6 新特性,优势和用法?

ES6 新特性,优势和用法?

ES6(ECMAScript 2015)引入了许多新特性,这些特性让 JavaScript 变得更加强大、简洁和易于使用。下面为你详细介绍一些常见的 ES6 新特性、它们的优势以及用法。

1. 块级作用域:letconst

特性介绍

在 ES6 之前,JavaScript 只有全局作用域和函数作用域,使用 var 声明变量时可能会导致变量提升和作用域混乱的问题。letconst 用于声明块级作用域的变量,let 声明的变量可以重新赋值,而 const 声明的常量一旦赋值就不能再重新赋值(对于引用类型,虽然不能重新赋值,但可以修改其内部属性)。

优势
  • 避免变量提升带来的问题,使代码逻辑更加清晰。
  • 防止变量在不期望的作用域内被修改。
代码示例
// 使用 var 声明变量,存在变量提升问题
function varExample() {if (true) {var x = 10;}console.log(x); // 输出 10,因为 var 声明的变量会提升到函数作用域顶部
}
varExample();// 使用 let 声明变量,具有块级作用域
function letExample() {if (true) {let y = 20;}// console.log(y); // 报错,y 只在 if 块级作用域内有效
}
letExample();// 使用 const 声明常量
function constExample() {const PI = 3.14;// PI = 3.1415; // 报错,常量不能重新赋值const obj = { name: 'John' };obj.name = 'Jane'; // 可以修改引用类型的内部属性console.log(obj.name); // 输出 Jane
}
constExample();

2. 箭头函数

特性介绍

箭头函数是 ES6 中引入的一种简洁的函数定义方式,它使用箭头 => 来定义函数。箭头函数没有自己的 thisargumentssupernew.target,它的 this 值继承自外层函数。

优势
  • 语法简洁,减少代码量。
  • 解决了 this 指向问题,避免了使用 that = this.bind(this) 等方式。
代码示例
// 传统函数定义
function add(a, b) {return a + b;
}
console.log(add(3, 5)); // 输出 8// 箭头函数定义
const addArrow = (a, b) => a + b;
console.log(addArrow(3, 5)); // 输出 8// 箭头函数的 this 指向问题
const person = {name: 'John',sayHello: function() {// 传统函数的 this 指向 person 对象console.log(`Hello, my name is ${this.name}`);setTimeout(function() {// 这里的 this 指向全局对象(在浏览器中是 window)console.log(`After 1 second, my name is ${this.name}`);}, 1000);},sayHelloArrow: function() {console.log(`Hello, my name is ${this.name}`);setTimeout(() => {// 箭头函数的 this 继承自外层函数,即 person 对象console.log(`After 1 second, my name is ${this.name}`);}, 1000);}
};
person.sayHello();
person.sayHelloArrow();

3. 模板字符串

特性介绍

模板字符串使用反引号()来定义字符串,可以在字符串中嵌入表达式,使用 ${}` 语法。

优势
  • 字符串拼接更加简洁直观,避免了使用 + 号进行拼接的繁琐。
  • 可以保留换行和缩进,使代码更易读。
代码示例
const name = 'John';
const age = 30;// 传统字符串拼接
const message1 = 'My name is ' + name + ' and I am ' + age + ' years old.';
console.log(message1);// 使用模板字符串
const message2 = `My name is ${name} and I am ${age} years old.`;
console.log(message2);// 保留换行和缩进
const multiLineMessage = `This is a multi-line message.It can have multiple linesand preserve indentation.
`;
console.log(multiLineMessage);

4. 解构赋值

特性介绍

解构赋值允许你从数组或对象中提取值,并赋值给变量。

优势
  • 代码更加简洁,避免了手动访问数组元素或对象属性的繁琐。
  • 可以方便地交换变量的值。
代码示例
// 数组解构赋值
const numbers = [1, 2, 3];
const [a, b, c] = numbers;
console.log(a); // 输出 1
console.log(b); // 输出 2
console.log(c); // 输出 3// 交换变量的值
let x = 10;
let y = 20;
[x, y] = [y, x];
console.log(x); // 输出 20
console.log(y); // 输出 10// 对象解构赋值
const personObj = { firstName: 'John', lastName: 'Doe', age: 30 };
const { firstName, lastName, age } = personObj;
console.log(firstName); // 输出 John
console.log(lastName); // 输出 Doe
console.log(age); // 输出 30// 重命名变量
const { firstName: givenName, lastName: familyName } = personObj;
console.log(givenName); // 输出 John
console.log(familyName); // 输出 Doe

5. 类和继承

特性介绍

ES6 引入了 class 关键字,用于定义类,以及 extends 关键字,用于实现类的继承。类是一种面向对象的编程概念,使 JavaScript 更符合传统的面向对象语言的风格。

优势
  • 代码结构更加清晰,提高了代码的可维护性和可扩展性。
  • 使 JavaScript 更易于理解和使用面向对象的编程范式。
代码示例
// 定义一个类
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a sound.`);}
}// 定义一个子类,继承自 Animal 类
class Dog extends Animal {constructor(name) {super(name); // 调用父类的构造函数}speak() {console.log(`${this.name} barks.`);}
}const animal = new Animal('Generic Animal');
animal.speak(); // 输出 Generic Animal makes a sound.const dog = new Dog('Buddy');
dog.speak(); // 输出 Buddy barks.

6. Promise 对象

特性介绍

Promise 是一种处理异步操作的对象,它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。可以使用 then 方法处理成功的结果,使用 catch 方法处理失败的结果。

优势
  • 解决了回调地狱问题,使异步代码更加清晰和易于维护。
  • 提供了统一的异步操作处理方式。
代码示例
// 创建一个 Promise 对象
const promise = new Promise((resolve, reject) => {setTimeout(() => {const success = true;if (success) {resolve('Operation succeeded');} else {reject('Operation failed');}}, 1000);
});// 处理 Promise 的结果
promise.then((result) => {console.log(result); // 输出 Operation succeeded}).catch((error) => {console.error(error);});

7. 模块化:importexport

特性介绍

ES6 引入了模块化的概念,使用 export 关键字导出模块中的变量、函数或类,使用 import 关键字导入其他模块中的内容。

优势
  • 提高了代码的可维护性和可复用性,将代码拆分成多个模块,每个模块负责单一的功能。
  • 避免了全局命名冲突。
代码示例

模块文件 math.js

// 导出变量
export const PI = 3.14;// 导出函数
export function add(a, b) {return a + b;
}// 导出类
export class Calculator {constructor() {}multiply(a, b) {return a * b;}
}

主文件 main.js

// 导入模块中的内容
import { PI, add, Calculator } from './math.js';console.log(PI); // 输出 3.14
console.log(add(3, 5)); // 输出 8const calculator = new Calculator();
console.log(calculator.multiply(3, 5)); // 输出 15

以上这些 ES6 新特性让 JavaScript 编程更加高效、简洁和强大,在现代 JavaScript 开发中被广泛使用。

如何在项目中使用ES6的新特性?

前端项目使用 ES6 新特性

简单网页直接使用

如果你只是做一个简单的网页,不涉及复杂的项目构建,就可以直接在 HTML 文件里用 ES6 新特性。不过要注意,有些老版本的浏览器可能不支持这些新特性哦。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>ES6 简单使用</title>
</head><body><!-- 这里用 type="module" 告诉浏览器这是个 ES6 模块 --><script type="module">// 用箭头函数定义一个简单的函数,它用来拼接问候语const sayHello = (name) => `你好,${name}`;// 调用这个函数,把结果打印到控制台console.log(sayHello('张三'));// 定义一个对象,包含姓名和年龄const person = {name: '李四',age: 25};// 用解构赋值把对象里的属性取出来,赋值给同名变量const { name, age } = person;// 把取出的属性信息打印到控制台console.log(`${name} 今年 ${age} 岁了。`);</script>
</body></html>
使用构建工具(Webpack + Babel)

对于大型的前端项目,为了让代码能在各种浏览器正常运行,还能优化代码,我们通常会用构建工具。这里以 Webpack 和 Babel 为例。

步骤 1:创建项目并初始化
先创建一个新的文件夹当作项目目录,然后在这个目录下打开命令行工具,运行 npm init -y 命令,它会快速帮你生成一个 package.json 文件,这个文件记录着项目的各种信息和依赖。

步骤 2:安装必要的依赖
在命令行里运行下面的命令,安装 Webpack、Webpack 命令行工具、Babel 加载器、Babel 核心和 Babel 预设环境。

npm install webpack webpack-cli babel-loader @babel/core @babel/preset-env --save-dev

步骤 3:配置 Babel
在项目根目录下创建一个 .babelrc 文件,把下面的内容复制进去:

{// 告诉 Babel 用 @babel/preset-env 这个预设来转换代码"presets": ["@babel/preset-env"]
}

步骤 4:配置 Webpack
在项目根目录下创建一个 webpack.config.js 文件,内容如下:

const path = require('path');module.exports = {// 项目的入口文件,Webpack 从这里开始打包entry: './src/index.js',output: {// 打包后文件的输出目录path: path.resolve(__dirname, 'dist'),// 打包后文件的名称filename: 'bundle.js'},module: {rules: [{// 匹配所有以 .js 结尾的文件test: /\.js$/,// 排除 node_modules 目录下的文件exclude: /node_modules/,use: {// 使用 babel-loader 来处理 .js 文件loader: 'babel-loader'}}]}
};

步骤 5:编写 ES6 代码
在项目里创建一个 src 文件夹,在里面创建 index.js 文件,用 ES6 特性写代码:

// 定义一个类,代表动物
class Animal {// 构造函数,用来初始化对象的属性constructor(name) {this.name = name;}// 定义一个方法,让动物发出声音speak() {console.log(`${this.name} 发出了声音。`);}
}// 创建一个 Animal 类的实例
const dog = new Animal('小狗');
// 调用实例的 speak 方法
dog.speak();

步骤 6:打包项目
package.json 文件里添加一个打包脚本,像这样:

{"scripts": {"build": "webpack"}
}

然后在命令行里运行 npm run build 命令,Webpack 就会把 src 目录下的代码打包成 dist 目录下的 bundle.js 文件。

步骤 7:在 HTML 里引入打包后的文件
dist 目录下创建一个 index.html 文件,把打包后的 bundle.js 文件引入进去:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Webpack 打包后的页面</title>
</head><body><!-- 引入打包后的 JavaScript 文件 --><script src="bundle.js"></script>
</body></html>

Node.js 项目使用 ES6 新特性

Node.js 高版本直接支持 ES6 模块

从 Node.js 13.2.0 版本开始,Node.js 原生支持 ES6 模块了。有两种方式可以用:

方式一:用 .mjs 文件扩展名
把文件扩展名改成 .mjs,就能直接在文件里用 ES6 模块语法啦。

// math.mjs
// 导出一个函数,用来做加法
export const add = (a, b) => a + b;// main.mjs
// 从 math.mjs 文件里导入 add 函数
import { add } from './math.mjs';
// 调用 add 函数,把结果打印到控制台
console.log(add(3, 5));

然后在命令行里运行 node main.mjs 命令。

方式二:在 package.json 里设置 type: "module"
package.json 文件里加上 "type": "module",这样 .js 文件也能使用 ES6 模块语法了。

{"name": "node-es6-project","version": "1.0.0","type": "module","scripts": {"start": "node main.js"}
}
// math.js
// 导出一个函数,用来做乘法
export const multiply = (a, b) => a * b;// main.js
// 从 math.js 文件里导入 multiply 函数
import { multiply } from './math.js';
// 调用 multiply 函数,把结果打印到控制台
console.log(multiply(3, 5));

接着在命令行里运行 npm start 命令。

用 Babel 转换代码(兼容旧版本 Node.js)

要是你得兼容旧版本的 Node.js,就可以用 Babel 来转换代码。

步骤 1:创建项目并初始化
同样先创建项目目录,在目录下运行 npm init -y 命令初始化 package.json 文件。

步骤 2:安装依赖
在命令行里运行下面的命令,安装 Babel 相关的依赖:

npm install @babel/core @babel/cli @babel/preset-env --save-dev

步骤 3:配置 Babel
在项目根目录下创建 .babelrc 文件,内容和前面前端项目里的一样:

{"presets": ["@babel/preset-env"]
}

步骤 4:编写 ES6 代码
src 目录下创建 index.js 文件,用 ES6 特性写代码:

// 定义一个异步函数,模拟获取数据
async function fetchData() {// 返回一个 Promise 对象,1 秒后返回数据return new Promise((resolve) => {setTimeout(() => {resolve('数据获取成功');}, 1000);});
}// 立即执行的异步函数
(async () => {// 等待 fetchData 函数执行完,把结果赋值给 data 变量const data = await fetchData();// 把获取到的数据打印到控制台console.log(data);
})();

步骤 5:转换代码
package.json 文件里添加转换脚本:

{"scripts": {"build": "babel src --out-dir dist"}
}

然后在命令行里运行 npm run build 命令,Babel 会把 src 目录下的代码转换后放到 dist 目录里。

步骤 6:运行转换后的代码
在命令行里运行 node dist/index.js 命令,就能看到转换后的代码正常运行啦。

在 Node.js 项目中,如何使用 ES6 的新特性?

在 Node.js 项目里使用 ES6(ES2015)新特性可以让代码更简洁、高效且易于维护。下面从几个方面详细介绍如何在 Node.js 项目中使用 ES6 新特性。

1. 开启 ES6 支持

Node.js 默认支持大部分 ES6 特性,但在早期版本里,对于一些特性可能需要额外配置。现在 Node.js 较新的版本(如 v14 及以上)已经很好地支持了 ES6 特性。不过,如果要使用 ES6 的模块系统(importexport),需要做些额外设置。

使用 .mjs 文件扩展名

把文件扩展名改为 .mjs,Node.js 会自动将其视为 ES6 模块。

// 示例文件:math.mjs
// 定义一个函数,用于计算两个数的和
export function add(a, b) {return a + b;
}// 示例文件:main.mjs
// 从 math.mjs 模块中导入 add 函数
import { add } from './math.mjs';// 调用 add 函数
const result = add(3, 5);
console.log(result); 

在命令行中运行 node main.mjs,就能看到输出结果。

package.json 中配置

package.json 文件里添加 "type": "module",这样 .js 文件也能使用 ES6 模块语法。

{"name": "my-node-project","type": "module","version": "1.0.0"
}

然后就可以在 .js 文件里使用 importexport 了。

2. 常用 ES6 特性示例

箭头函数

箭头函数是 ES6 中简洁定义函数的方式,它没有自己的 thisargumentssupernew.target,适合用于简单的回调函数。

// 传统函数定义
function square(x) {return x * x;
}// 箭头函数定义
const squareArrow = (x) => x * x;console.log(square(4)); 
console.log(squareArrow(4)); 
模板字符串

模板字符串可以让字符串拼接更方便,支持换行和嵌入表达式。

const name = '张三';
const age = 25;// 传统字符串拼接
const message1 = '你好,我叫' + name + ',今年' + age + '岁。';// 模板字符串拼接
const message2 = `你好,我叫 ${name},今年 ${age} 岁。`;console.log(message1);
console.log(message2);
解构赋值

解构赋值可以方便地从数组或对象中提取值并赋给变量。

// 数组解构
const numbers = [1, 2, 3];
const [a, b, c] = numbers;
console.log(a); 
console.log(b); 
console.log(c); // 对象解构
const person = {firstName: '李四',lastName: '王五',age: 30
};
const { firstName, lastName, age } = person;
console.log(firstName); 
console.log(lastName); 
console.log(age); 
letconst

letconst 是 ES6 中用于声明变量的关键字,let 有块级作用域,const 用于声明常量,一旦赋值就不能再重新赋值。

// let 示例
function testLet() {if (true) {let x = 10;console.log(x); }// 这里访问不到 x,因为 x 有块级作用域// console.log(x); 
}
testLet();// const 示例
const PI = 3.14159;
// 下面这行代码会报错,因为 PI 是常量,不能重新赋值
// PI = 3.14; 
类和继承

ES6 引入了 class 关键字,让 JavaScript 有了更像传统面向对象语言的类和继承机制。

// 定义一个基类
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} 发出声音`);}
}// 定义一个子类,继承自 Animal 类
class Dog extends Animal {speak() {console.log(`${this.name} 汪汪叫`);}
}const myDog = new Dog('旺财');
myDog.speak(); 

通过这些方法,你可以在 Node.js 项目中充分利用 ES6 的新特性,提升开发效率和代码质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23262.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VScode+stfp插件,实现文件远程同步保存【2025实操有效】

目录 1 痛点2 准备工作3 操作步骤3.1 第一步&#xff0c;下载STFP插件3.2 第二步&#xff0c;修改配置文件3.3 第三步&#xff0c;测试是否成功 4 后记 1 痛点 我一直用vscode远程连接服务器&#xff0c;传代码文件等到服务器上面&#xff0c;突然有一次服务器那边尽心维修&am…

【quicker】调节PPT指定字号字体大小/快速调节WPS的PPT字体大小

在quicker的拓展动作中找不到直接指定字号大小方式的动作。 换个思路&#xff0c;既然无法通过alt键模拟&#xff0c;不如模拟右键菜单触发&#xff1f;尝试过失败了 所以有了第三种方法 &#xff0c;首先给字体窗口设置快捷键&#xff0c;此处设置的是altshiftf&#xff0c;然…

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention&#xff08;GQA&#xff09;详解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改进版&#xff0c;它通过在 多个查询头&#xff08;Query Heads&#xff09;之间共享 Key 和 Value&am…

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

tortoiseGit的使用和上传拉取

tortoiseGit的使用和上传拉取 下载TortoiseGit 通过网盘分享的文件&#xff1a;tortoiseGit.zip 链接: https://pan.baidu.com/s/1EOT_UsM9_OysRqXa8gES4A?pwd1234 提取码: 1234 在电脑桌面新建文件夹并进入 右击鼠标 将网址复制上去 用户名和密码是在git注册的用户名和…

Mybatis学习总结

官网 概念 用于简化JDBC的开发。 在配置mybatis的时候如果没有建立连接识别不了信息&#xff0c;我们需要在idea配置mysql的配置信息 JDBC是一套操作关系数据库的API&#xff0c;有效率&#xff0c;和mybatis比起来资源节约&#xff0c;性能高&#xff0c;不繁琐。 数据库连…

SQL笔记#数据更新

一、数据的插入(INSERT语句的使用方法) 1、什么是INSERT 首先通过CREATE TABLE语句创建表&#xff0c;但创建的表中没有数据&#xff1b;再通过INSERT语句向表中插入数据。 --创建表ProductIns CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL,product_name …

dockerfile构建haproxy

1. 结构目录 [rootlocalhost ~]# tree haproxy/ haproxy/ ├── dockerfile └── files├── haproxy-2.5.0.tar.gz├── haproxy.cfg├── install.sh└── start.sh1 directory, 5 files [rootlocalhost ~]# [rootlocalhost ~]# cd haproxy/ [rootlocalhost haproxy]…

Docker(Nginx)部署Vue

简介&#xff1a;目标使用docker将vue生成的dist文件&#xff0c;结合nginx生成镜像&#xff0c;然后运行&#xff1b; 1、首选确保vue项目正确运行&#xff0c;并能正确打包dist文件&#xff1b; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件&#xf…

C++——模版(二)

前言 我们前面讲过模版的一&#xff0c;不知道大家还有没有所印象&#xff0c;如果大家不太能回忆起来可以再去前面看一下&#xff0c;那通过我们讲解了几个容器之后&#xff0c;相信大家现在应该已经对模版很熟悉了&#xff0c;那模版还剩下一些其他的内容我们就在这里进行讲…

算法与数据结构(旋转链表)

题目 思路 每个节点向右移动k个位置&#xff0c;其实就是从头开始遍历&#xff0c;将n-k个节点顺序插入到链表的尾部。 如上图所示的示例1&#xff0c;先将1插入到5的后面&#xff0c;再将2插入到1的后面&#xff0c;最后将3插入到2的后面即可。 代码详解 定义一个cur变量用…

TOGAF之架构标准规范-信息系统架构 | 应用架构

TOGAF是工业级的企业架构标准规范&#xff0c;信息系统架构阶段是由数据架构阶段以及应用架构阶段构成&#xff0c;本文主要描述信息系统架构阶段中的应用架构阶段。 如上所示&#xff0c;信息系统架构&#xff08;Information Systems Architectures&#xff09;在TOGAF标准规…

智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码

一、 莲花算法 1.1 算法原理 莲花算法&#xff08;Lotus flower algorithm&#xff0c;LFA&#xff09;是一种受自然启发的优化算法&#xff0c;其灵感来源于莲花的自清洁特性和授粉过程。莲花的自清洁特性&#xff0c;即所谓的“莲花效应”&#xff0c;是由其叶片表面的微纳…

CSS 媒体查询:从入门到精通,打造跨设备完美体验

在当今移动互联网时代&#xff0c;用户访问网站的设备早已不再局限于桌面电脑&#xff0c;手机、平板等各种屏幕尺寸的设备层出不穷。为了确保用户在不同设备上都能获得良好的浏览体验&#xff0c;响应式网页设计应运而生。而 CSS 媒体查询&#xff0c;正是实现响应式设计的核心…

【Python LeetCode 专题】树

LeetCode 题目104. 二叉树的最大深度(gif 图解)方法一:后序遍历(DFS)方法二:层序遍历(BFS)872. 叶子相似的树(DFS 遍历)1448. 统计二叉树中好节点的数目(DFS 遍历)437. 路径总和 III(前缀和 + DFS 回溯)1372. 二叉树中的最长交错路径(DFS)236. 二叉树的最近公共…

Spring有哪些缺点?

大家好&#xff0c;我是锋哥。今天分享关于【Spring有哪些缺点?】面试题。希望对大家有帮助&#xff1b; Spring有哪些缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring框架是一个广泛使用的企业级Java开发框架&#xff0c;提供了丰富的功能和强大的灵…

MySQL数据库——索引潜规则(回表查询、索引覆盖、索引下推)

大家好&#xff0c;这里是编程Cookbook。本文详细介绍MySQL索引的三个潜规则——回表查询、索引覆盖、索引下推&#xff0c;以提升数据库的性能。 文章目录 索引回顾聚集索引&#xff08;Clustered Index&#xff09;非聚集索引&#xff08;Secondary Index/辅助索引/二级索引&…

VScode运行后出现黑窗口

原文链接&#xff1a;VScode运行出黑窗口 1.安装插件&#xff1a;C/C Compile Run 2.快捷键【CtrlShiftp】,点击【首选项&#xff1a;打开用户设置】

使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统

GitHub代码仓库 架构 从高层次来看&#xff0c;这些系统的步骤如下&#xff1a; 将问题转换为SQL查询&#xff1a;模型将用户输入转换为SQL查询。 执行SQL查询&#xff1a;执行查询。 回答问题&#xff1a;模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…