javascript基础学习系列三百六十九:Response对象

顾名思义,Response 对象是获取资源响应的接口。这个接口暴露了响应的相关信息,也暴露了使
用响应体的不同方式。
注意 与响应体相关的属性和方法将在本章24.5.6节介绍。

1. 创建 Response 对象

可以通过构造函数初始化 Response 对象且不需要参数。此时响应实例的属性均为默认值,因为它 23 并不代表实际的 HTTP 响应:

let r = new Response();
console.log(r);
// Response {
//   body: (...)
     //   bodyUsed: false
    //   headers: Headers {}
// ok: true
    //   redirected: false
    //   status: 200
    //   statusText: "OK"
// type: "default" 26
// url: "" // }

Response 构造函数接收一个可选的 body 参数。这个 body 可以是 null,等同于 fetch()参数 init 中的 body。还可以接收一个可选的 init 对象,这个对象可以包含下表所列的键和值。

网络请求与远程资源 键值

headers
status
statusText
必须是 Headers 对象实例或包含字符串键/值对的常规对象实例 默认为没有键/值对的 Headers 对象
表示 HTTP 响应状态码的整数
默认为 200
表示 HTTP 响应状态的字符串 默认为空字符串
可以像下面这样使用 body 和 init 来构建 Response 对象:

let r = new Response('foobar', {
      status: 418,
      statusText: 'I\'m a teapot'
    });
    console.log(r);
// Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: false
    //   redirected: false
// status: 418
// statusText: "I'm a teapot"
    //   type: "default"
// url: "" // }

大多数情况下,产生 Response 对象的主要方式是调用 fetch(),它返回一个最后会解决为 Response 对象的期约,这个 Response 对象代表实际的 HTTP 响应。下面的代码展示了这样得到的 Response 对象:

   fetch('https://foo.com')
      .then((response) => {
        console.log(response);
      });
// Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: true
    //   redirected: false
    //   status: 200
    //   statusText: "OK"
    //   type: "basic"
    //   url: "https://foo.com/"
    // }

Response 类还有两个用于生成 Response 对象的静态方法:Response.redirect()和 Response. error()。前者接收一个 URL 和一个重定向状态码(301、302、303、307 或 308),返回重定向的 Response 对象:

console.log(Response.redirect('https://foo.com', 301)); // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: false
    //   redirected: false
// status: 301
    //   statusText: ""
    //   type: "default"
// url: "" // }

提供的状态码必须对应重定向,否则会抛出错误:

Response.redirect('https://foo.com', 200);
// RangeError: Failed to execute 'redirect' on 'Response': Invalid status code

另一个静态方法 Response.error()用于产生表示网络错误的 Response 对象(网络错误会导致 fetch()期约被拒绝)。

   console.log(Response.error());
    // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: false
    //   redirected: false
// status: 0
    //   statusText: ""
    //   type: "error"
// url: "" // }

读取响应状态信息

Response 对象包含一组只读属性,描述了请求完成后的状态,如下表所示。
属性值

headers ok redirected status statusText
type
url
响应包含的 Headers 对象
布尔值,表示 HTTP 状态码的含义。200~299 的状态码返回 true,其他状态码返回 false
布尔值,表示响应是否至少经过一次重定向
整数,表示响应的 HTTP 状态码
字符串,包含对 HTTP 状态码的正式描述。这个值派生自可选的 HTTP Reason-Phrase 字段,因此如果服 务器以 Reason-Phrase 为由拒绝响应,这个字段可能是空字符串
字符串,包含响应类型。可能是下列字符串值之一
 basic:表示标准的同源响应
 cors:表示标准的跨源响应
 error:表示响应对象是通过 Response.error()创建的  opaque:表示 no-cors 的 fetch()返回的跨源响应
 opaqueredirect:表示对 redirect 设置为 manual 的请求的响应
包含响应 URL 的字符串。对于重定向响应,这是最终的 URL,非重定向响应就是它产生的

网络请求与远程资源

以下代码演示了返回 200、302、404 和 500 状态码的 URL 对应的响应:

fetch('//foo.com').then(console.log);
    // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: true
    //   redirected: false
    //   status: 200
    //   statusText: "OK"
    //   type: "basic"
    //   url: "https://foo.com/"
    // }
    fetch('//foo.com/redirect-me').then(console.log);
    // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: true
// redirected: true
    //   status: 200
    //   statusText: "OK"
    //   type: "basic"
// url: "https://foo.com/redirected-url/" // }
fetch('//foo.com/does-not-exist').then(console.log); // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: false
    //   redirected: true
// status: 404
// statusText: "Not Found"
    //   type: "basic"
    //   url: "https://foo.com/does-not-exist/"
    // }
    fetch('//foo.com/throws-error').then(console.log);
    // Response {
    //   body: (...)
    //   bodyUsed: false
    //   headers: Headers {}
// ok: false
    //   redirected: true
// status: 500
// statusText: "Internal Server Error"
    //   type: "basic"
    //   url: "https://foo.com/throws-error/"
    // }
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript中的对象是一种无序的键/值对集合。您可以使用对象来存储任意数据类型,并且可以使用键来访问这些数据。 创建对象的方式有多种,其中一种是使用对象字面量语法: ``` let obj = { key1: value1, key2: value2, ... }; ``` 您也可以使用构造函数来创建对象: ``` let obj = new Object(); obj.key1 = value1; obj.key2 = value2; ... ``` JavaScript还提供了一种称为原型的机制,可以在一个对象基础上创建新对象。您可以使用Object.create()来创建一个新对象,并将其关联到另一个对象: ``` let obj1 = {key1: value1}; let obj2 = Object.create(obj1); ``` 访问对象中的值可以使用点语法或中括号语法: ``` console.log(obj.key1); console.log(obj['key1']); ``` 对象可以嵌套,创建多级对象 ``` let obj = { key1: { key2: { key3: value } } }; ``` JavaScript还提供了一种称为原型的机制,可以在一个对象基础上创建新对象。 ### 回答2: JavaScript是一种重要的脚本语言,它的强大之处在于它的对象。可以把JavaScript对象看作是创建Web应用程序的基石。 JavaScript对象是一种复合数据类型,由属性和方法组成。每个对象都包含一组属性和方法,它们可以通过对象的名字来调用或者访问。对象可以创造新的属性和方法,也可以从其他对象继承属性和方法。JavaScript提供的对象类型有三种:原始对象、内置对象和宿主对象。 原始对象是指通过原型链创建的对象,它由用户自己定义或系统预定义的对象来创建。内置对象是指由JavaScript语言预定义的对象类型,这些对象JavaScript的核心,在任何JavaScript环境下都可以使用。宿主对象是指由浏览器或服务器环境提供的对象类型,可以用来操作系统、浏览器或者其他外部环境。 对象JavaScript的核心概念之一,所以对于JavaScript初学者来说,学习对象是非常重要的。在学习对象之前,需要先掌握基本的语法和编程概念,例如变量、函数和循环等。在学习对象之后,可以掌握面向对象编程的思想,用对象的方式来组织和管理代码,使得代码更加清晰和易于维护。 总之,学习JavaScript对象是非常重要的,因为它们是JavaScript编程的核心和基石。掌握JavaScript对象可以让你更好地理解JavaScript编程的本质,从而更好地开发Web应用程序。 ### 回答3: JavaScript是一门面向对象语言,它的核心特性之一就是对象。JS对象是一组属性的集合,每个属性都由一个字符串和一个值组成,这个值可以是函数。对象可用于封装数据和功能,以及创建可重复使用的代码块,从而实现更高效的编程。 在JavaScript中,对象的创建方式有两种:字面量和构造函数。字面量方式创建对象非常简单,只需要按照对象的键-值对方式来书写,如下所示: ```javascript var person = { name: 'Alice', age: 20, sayHello: function() { console.log("Hello, I'm "+this.name); } } ``` 上述代码中,我们定义了一个名为`person`的对象,它有两个属性`name`和`age`,以及一个方法`sayHello`。使用字面量方式创建对象,我们可以很方便地定义对象的初始状态。 另一种创建对象的方式是构造函数。构造函数本质上是一种特殊的函数,以函数的形式返回一个新的对象,实现对象的构建。`new`操作符用来创建对象的实例,如下所示: ```javascript function Person(name, age) { this.name = name; this.age = age; this.sayHello = function() { console.log("Hello, I'm "+this.name); }; } var person1 = new Person('Bob', 30); var person2 = new Person('Charlie', 40); ``` 在上述代码中,我们创建了一个名为`Person`的构造函数,这个函数接受两个参数`name`和`age`,并将它们赋值给对象的属性。使用`new`操作符创建实例`person1`和`person2`时,会执行构造函数,并返回一个新的对象。 除了创建对象JavaScript还提供了一些内置对象,如`Math`、`Date`、`String`、`Array`等。这些内置对象提供了一些预定义的属性和方法,使得编写JavaScript代码更加高效和简便。 总而言之,理解JavaScript对象及其使用方式是非常重要的,因为大多数JavaScript代码都是围绕对象进行的。只有深入了解对象,才能更好地进行JavaScript编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值