0

我知道这有点愚蠢/没用,但我很想理解它。我试图调用hasOwnProperty一个响应对象,但它总是返回false。为什么?

(await fetch('http://dummy.restapiexample.com/api/v1/employees')).hasOwnProperty('status');
4

2 回答 2

1

至少在 Chrome 中,该status属性实际上不是自己的属性,而是原型上的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作为自己的属性。

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

于 2020-09-10T07:45:49.183 回答
-1
fetch('http://dummy.restapiexample.com/api/v1/employees')
  .then(response => response.json())
  .then(data => console.log(data.hasOwnProperty('status')));
于 2020-09-10T07:42:51.223 回答