在响应中调用 '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
的 属性,而不是而不是自己的 属性 错误实例。
我知道这有点 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
的 属性,而不是而不是自己的 属性 错误实例。