env:nodejs 8.1.5,也在jscomplete上进行了测试,结果相同
const error = new Error("message");
const { message, ...rest } = error;
const keys = Object.keys(error);
const hasStack = error.hasOwnProperty("stack");
其余对象原来不包括stack属性,因为Object.keys不会返回它,并且“ for in”也不会拾取它。 但是,它是错误对象的自身属性(上面的hasStack是true)。
有什么作用?在文档或https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
上的polyfill中,找不到关于此属性特殊格式的任何信息答案 0 :(得分:3)
它不可枚举,因此不会包含在Object.keys
或for..in
迭代中:
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'));
要遍历所有所有属性,包括不可枚举的属性,请改用Object.getOwnPropertyNames
:
// Chrome:
const error = new Error("message");
Object.getOwnPropertyNames(error).forEach((propName) => {
console.log(propName);
});
在Firefox上,这两个属性是原型上的吸气剂,而不是直接位于error
对象上。 (除stack
和message
之外,原型还具有其他属性)
// Chrome:
const error = new Error("message");
Object.getOwnPropertyNames(Object.getPrototypeOf(error)).forEach((propName) => {
console.log(propName);
});