在响应中调用 'hasOwnProperty' (fetch-api)

Call 'hasOwnProperty' on a reponse (fetch-api)

我知道这有点 dumb/useless,但我很想了解它。我试图在响应对象上调用 hasOwnProperty,但它总是 returns false。为什么?

(await fetch('http://dummy.restapiexample.com/api/v1/employees')).hasOwnProperty('status');
fetch('http://dummy.restapiexample.com/api/v1/employees')
  .then(response => response.json())
  .then(data => console.log(data.hasOwnProperty('status')));

在Chrome中,至少status属性实际上不是own-property,而是getter 在原型上:

fetch('https://stacksnippets.net/js', { mode: 'no-cors' })
  .then((response) => {
    console.log(
      response.hasOwnProperty('status'),
      Object.getPrototypeOf(response).hasOwnProperty('status'),
      Object.getPrototypeOf(response) === Response.prototype
    );
    console.log(Object.getOwnPropertyDescriptor(Response.prototype, 'status'));
  });

因此,通过引用 response.status,您将调用 getter,尽管事实上响应没有 status 作为 own-property。

错误对象在某些环境中的行为方式相同 - 在早期版本的 Firefox 中,例如,.message 属性 是 Error.prototype 的 属性,而不是而不是自己的 属性 错误实例。