javascript - Object.keys(anObject) 是否返回一个对象的原型(prototype)?

标签 javascript object ecmascript-6 prototype

<分区>

我正在阅读 Eloquent JavaScript's Map section我无法理解它的最后一段:

If you do have a plain object that you need to treat as a map for some reason, it is useful to know that Object.keys returns only an object’s own keys, not those in the prototype. As an alternative to the in operator, you can use the hasOwnProperty method, which ignores the object’s prototype.

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

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

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

最佳答案

你对这段话的理解是正确的,不过这里的in用法是错误的。

它返回 true,因为 Object.keys(anObject) 返回的数组在其原型(prototype)中有一个名为 toString 的属性。 in 还检查​​原型(prototype),而 hasOwnProperty 仅检查对象实际具有的属性(意味着“手动添加”到空对象的属性)。

但它没有名称为 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

关于javascript - Object.keys(anObject) 是否返回一个对象的原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930126/

相关文章:

javascript - 我应该在 React 组件中的什么地方绑定(bind)方法?

javascript - 使用node和javascript将html表单数据以json格式保存在.json文件中

javascript - 搜索和复选框上的 Angular 过滤器

php - 调用函数 - 变量

javascript - 如何在rails中使用JSON数据并将其提供给javascript

javascript - 将函数转换为 es6 类

javascript - 当我单击提交输入时,如何从输入同级中删除属性 "disabled"

javascript - 如何在 JavaScript 中获取一位数的随机数?

java - 为什么这段Java代码中有多个构造函数?

javascript - @syncfusion/ej2-ng-grids 中 GridComponent 的依赖关系解决