经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
一些八股:1.fetch 的理解。2.let、const、var
来源:cnblogs  作者:最小生成树  时间:2024/8/7 10:56:19  对本文有异议

一、 说说你对 Fetch 的理解,它有哪些优点和不足?

Fetch API 是现代 JavaScript 中用于进行网络请求的接口,旨在替代传统的 XMLHttpRequest。它提供了一种更简单、更灵活的方法来获取资源和与服务器进行交互。下面,我将详细介绍 Fetch 的优点和不足。

Fetch 的优点:

语法简洁直观:Fetch 使用基于 Promise 的机制,这使得代码更加简洁易读。相比于 XMLHttpRequest,它避免了回调地狱(callback hell),大大提高了代码的可维护性。

  1. fetch('https://api.example.com/data')
  2. .then(response => response.json())
  3. .then(data => console.log(data))
  4. .catch(error => console.error('Error:', error));

 

更好的可读性和可维护性:由于 Fetch 是基于 Promise 的,结合 async/await 语法可以使异步代码看起来像同步代码一样,进一步提高代码的可读性。

  1. async function fetchData() {
  2. try {
  3. const response = await fetch('https://api.example.com/data');
  4. const data = await response.json();
  5. console.log(data);
  6. } catch (error) {
  7. console.error('Error:', error);
  8. }
  9. }

 

更强的灵活性:Fetch 提供了一组丰富的选项(options),可以轻松设置请求方法、头信息、请求体等。

  1. fetch('https://api.example.com/data', {
  2. method: 'POST',
  3. headers: {
  4. 'Content-Type': 'application/json'
  5. },
  6. body: JSON.stringify({ key: 'value' })
  7. });

 

Stream 处理:Fetch API 支持对响应体的流式处理,可以逐步读取响应数据,适用于处理大文件或实时数据。

  1. fetch('https://api.example.com/data')
  2. .then(response => {
  3. const reader = response.body.getReader();
  4. // 逐步处理数据
  5. });

 

 

Fetch 的不足:
  1. 不支持进度监控:与 XMLHttpRequest 不同,Fetch 目前不支持原生的进度事件(如 onprogress),这使得在下载或上传大文件时无法获得进度更新。

  2. 对老旧浏览器的兼容性:Fetch 是现代 API,某些老旧浏览器(如 IE)不支持,需要使用 polyfill 来保证兼容性。

  3. 默认不发送 Cookies:Fetch 默认不会发送 cookies,需要手动设置 credentials 选项。

  1. fetch('https://api.example.com/data', {
  2. credentials: 'include'
  3. });

 

错误处理机制:Fetch 对于网络错误和 HTTP 错误(如 404 或 500)的处理需要特别注意,因为只有网络错误会触发 catch,而 HTTP 错误仍会被视为成功的请求。

  1. fetch('https://api.example.com/data')
  2. .then(response => {
  3. if (!response.ok) {
  4. throw new Error('Network response was not ok');
  5. }
  6. return response.json();
  7. })
  8. .catch(error => console.error('Error:', error));

 

 

二、理解 JavaScript 中的 let、const 和 var

在 JavaScript 中,声明变量的方式主要有三种:varletconst。每种方式都有其独特的特性和适用场景。下面,我将详细介绍它们之间的区别。

1. var

var 是最早在 JavaScript 中引入的变量声明方式。它有以下几个特点:

  • 函数作用域var 声明的变量在函数内是局部变量,在函数外是全局变量。
  • 变量提升var 声明的变量会被提升到函数或全局作用域的顶部,但变量初始化不会提升。
  • 可重复声明:同一作用域内,var 声明的变量可以重复声明。
  1. function example() {
  2. console.log(a); // undefined
  3. var a = 10;
  4. console.log(a); // 10
  5. }
  6. example();

 

2. let

let 是在 ES6 中引入的,用于声明块级作用域的变量。它有以下几个特点:

  • 块级作用域let 声明的变量在块级作用域内有效,不会污染全局作用域。
  • 无变量提升let 声明的变量不会被提升,必须先声明后使用。
  • 不可重复声明:同一作用域内,let 声明的变量不能重复声明。
  1. function example() {
  2. if (true) {
  3. let a = 10;
  4. console.log(a); // 10
  5. }
  6. console.log(a); // ReferenceError: a is not defined
  7. }
  8. example();

 

3. const

const 也是在 ES6 中引入的,用于声明常量。它有以下几个特点:

  • 块级作用域const 声明的变量在块级作用域内有效。
  • 不可变性const 声明的变量必须在声明时初始化,且初始化后不可重新赋值(但对于对象和数组,其内部值是可变的)。
  • 不可重复声明:同一作用域内,const 声明的变量不能重复声明。
  1. function example() {
  2. const a = 10;
  3. a = 20; // TypeError: Assignment to constant variable.
  4. const obj = { key: 'value' };
  5. obj.key = 'new value'; // 这是允许的
  6. console.log(obj.key); // 'new value'
  7. }
  8. example();

 

原文链接:https://www.cnblogs.com/zx618/p/18343926

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号