Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.7k views
in Technique[技术] by (71.8m points)

javascript - Why isn't Error's stack property included in Object.keys?

env: nodejs 8.1.5, also tested on jscomplete with same results

const error = new Error("message");
const { message, ...rest } = error;
const keys = Object.keys(error);
const hasStack = error.hasOwnProperty("stack");

The rest object turns out to not include the stack property because Object.keys does not return it and a "for in" will not pick it up. It is, however, an own property of the error object (hasStack is true above).

What gives? I couldn't find anything about special-casing this property in the documentation or the polyfill on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It's not enumerable, so it won't be included in Object.keys or a for..in iteration:

const error = new Error("message");
// For Chrome, it's directly on the object:
console.log(Object.getOwnPropertyDescriptor(error, 'stack'));
// For Firefox, it's a getter on the prototype:
console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(error), 'stack'));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...