首页 > 解决方案 > Object.keys(anObject) 是否返回 anObject 的原型?

问题描述

我正在阅读Eloquent JavaScript 的 Map 部分,但我无法理解它的最后一段:

如果您确实有一个普通对象,出于某种原因需要将其视为映射,那么知道Object.keys它只返回对象自己的键而不是原型中的键是很有用的。作为in运算符的替代方法,您可以使用hasOwnProperty忽略对象原型的方法。

然后我假设Object.keys不返回对象从其原型的继承中获得的属性和方法。所以我尝试了以下方法:

var anObject = {};
console.log(Object.keys(anObject)); //Array []
console.log("toString" in Object.keys(anObject)); //true
console.log(anObject.hasOwnProperty("toString")); //false

显然,toString是在返回的数组中Object.keys(anObject),但是当我记录它的键时返回一个空数组?我是不是理解错了这段话?

标签: javascriptobjectecmascript-6prototype

解决方案


您正确理解了这段话,但是in这里的用法是错误的。

它返回 true,因为返回的 Array有一个在其原型中Object.keys(anObject)调用的属性。还检查原型,而仅检查对象实际具有的属性(意味着“手动添加”到空对象的属性)。toStringinhasOwnProperty

但它没有名称的“自己的财产”toString

let anObject = {};
let keys = Object.keys(anObject);

console.log("toString" in keys); //true, since there is a property "toString" in the keys.prototype object
console.log(keys.hasOwnProperty("toString")); //false, since there aren't any properties in the object itself


推荐阅读