首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

一些八股:1.fetch 的理解。2.let、const、var

编程知识
2024年08月05日 18:40

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

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

Fetch 的优点:

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

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

 

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

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

 

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

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

 

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

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

 

 

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

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

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

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

 

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

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

 

 

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

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

1. var

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

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

 

2. let

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

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

 

3. const

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

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

 

From:https://www.cnblogs.com/zx618/p/18343926
本文地址: http://www.shuzixingkong.net/article/816
0评论
提交 加载更多评论
其他文章 南京大学计算机基础(四)踩坑笔记
第六周 缓冲区溢出章节 bang问题: 每次输入的id将影响getbuf中的堆栈位置,用-u 12的ebp和-u 123的ebp位置就不一样。 注意汇编代码中不能出现a0(代表换行符),如果地址有a0就将它随便改改就行了(a0改为a8-0x8)。 注意gdb如果不能重定向,可能是因为你修改了gdbi
南京大学计算机基础(四)踩坑笔记 南京大学计算机基础(四)踩坑笔记 南京大学计算机基础(四)踩坑笔记
解锁GraphRag.Net的无限可能:手把手教你集成国产模型和本地模型
在上次的文章中,我们已经详细介绍了GraphRag的基本功能和使用方式。如果你还不熟悉,建议先阅读前面的文章 通过前两篇文章,相信你已经了解到GraphRag.Net目前只支持OpenAI规范的接口,但许多小伙伴在社区中提议,希望能增加对本地模型(例如:ollama等)的支持。所以这次,我们将探讨如
stm32 F103C8T6 4x4矩阵键盘使用
首先感谢 江科大 的stm32入门课程 受益匪浅。推荐有兴趣的朋友去看看。 先看看我用的矩阵键盘是啥样的(很常见的一种) 接线如图(其他型号根据自己需求接上GPIO口) 代码基于stm大善人的代码修改而来,讲的很详细,非常感谢。 直接上代码: 头文件Key4x4.h #ifndef __KEY4x4
stm32 F103C8T6 4x4矩阵键盘使用 stm32 F103C8T6 4x4矩阵键盘使用 stm32 F103C8T6 4x4矩阵键盘使用
如何对MIL-STD-1553B进行选型
MIL-STD-1553B产品选型是一个复杂而细致的过程,‌需要综合考虑多个因素以确保所选产品能够满足特定应用场景的需求。 一、‌引言 MIL-STD-1553B作为一种广泛应用于航空航天领域的数据总线标准,‌其产品的选型对于确保系统的高效、‌可靠运行至关重要。‌选型过程中,‌需要充分理解MIL-S
代码随想录Day5
242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram&
在oracle中将一行字符串拆分成多行
例如,有如下一张表,表名为bk_test。插入了以下数据: CREATE TABLE BK_TESK(id varchar2(10),s varchar2(20)); insert into BK_TESK values ('A','1,2,3'); insert i
在oracle中将一行字符串拆分成多行 在oracle中将一行字符串拆分成多行
架构演化学习思考(4) --- IOC的学习认识
架构演化学习思考(4) IOC的学习认识 IOC相关概念认识 什么是IOC? IOC全称为 Inversion Of Control ,即控制反转。它是一种控制思想,可以解释为类和类之间的依赖关系不再由代码直接控制,而是通过容器来控制和配置实现。 控制反转?那么什么是正传? 反转有啥好处?IOC到底
架构演化学习思考(4) --- IOC的学习认识 架构演化学习思考(4) --- IOC的学习认识 架构演化学习思考(4) --- IOC的学习认识
【Playwright+Python】系列教程(七)使用Playwright进行API接口测试
playwright也是可以做接口测试的,但个人觉得还是没有requests库强大,但和selenium相比的话,略胜一筹,毕竟支持API登录,也就是说可以不用交互直接调用接口操作了。 怎么用 既然是API的测试了,那肯定就别搞UI自动化那套,搞什么浏览器交互,那叫啥API测试,纯属扯淡。 也不像有
【Playwright+Python】系列教程(七)使用Playwright进行API接口测试 【Playwright+Python】系列教程(七)使用Playwright进行API接口测试 【Playwright+Python】系列教程(七)使用Playwright进行API接口测试