我知道这有点愚蠢/没用,但我很想理解它。我试图调用hasOwnProperty
一个响应对象,但它总是返回false
。为什么?
(await fetch('http://dummy.restapiexample.com/api/v1/employees')).hasOwnProperty('status');
我知道这有点愚蠢/没用,但我很想理解它。我试图调用hasOwnProperty
一个响应对象,但它总是返回false
。为什么?
(await fetch('http://dummy.restapiexample.com/api/v1/employees')).hasOwnProperty('status');
至少在 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
,而不是错误实例自己的属性。
fetch('http://dummy.restapiexample.com/api/v1/employees')
.then(response => response.json())
.then(data => console.log(data.hasOwnProperty('status')));