javascript - 如何使用 hasOwnProperty 检查属性?

标签 javascript

hasOwnProperty() 是否只检查用户创建的对象?

var myObj = {};
myObj.hasOwnProperty('toString'); // returns false

我想知道toString()是在哪个原型(prototype)中使用的?

String.hasOwnProperty('toString');// it's too returns false
Object.hasOwnProperty('toString');// it's too returns false

那么,如何检查toString() 或其他东西是原型(prototype)链中的什么?

还有,

var myArr = ['a','b','c'];
myArr.hasOwnProperty('length');
// returns true, why? but it is of Array or Object...

最佳答案

Does hasOwnProperty() checks only user created objects only?

它适用于在其原型(prototype)链上具有该方法的所有对象(除某些宿主对象之外的所有对象,即一些 IE 对象,以及使用 Object.create(null) 创建的对象,以及以及其他一些奇特的方式)。

默认情况下,

StringObject 没有直接使用 toString()(尽管您可以分配自己,但不推荐这样做)。

但是,他们确实将它放在了他们的原型(prototype)链上。由于使用了匹配的第一个属性查找并且 String 是一个构造函数,它将在 Function.prototype 上找到它。您可以通过执行...来确认这一点

String.toString == Function.prototype.toString

其他对象有它们自己的 toString(),这取决于什么在哪个上下文中最有意义。

var myArr = ['a','b','c'];
myArr.hasOwnProperty('length');// returns true, why? but it is of Array or Object...

数组确实有一个直接在其上的 length 属性。

如果你想知道一个对象在它的原型(prototype)链上是否有可用的属性,你可以使用in操作符...

var hasProp = 'toString' in String;

关于javascript - 如何使用 hasOwnProperty 检查属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880333/

相关文章:

javascript - Froogaloop 'finish' 事件也触发了 'pause' 事件

javascript - knockout 类型错误 : m. apply is not a function

javascript - Yii 中的外部 JS 文件

javascript - 模板代码创建指数数量的元素

javascript - 使用fabricjs(1.7.20)从保存/打印中排除背景图像?

javascript - 通过复选框选中时如何将行从 BootstrapTable 复制到另一个 Html 表?

javascript - 如何分别从用户那里获取多个文件?

javascript - 对象解构花括号内的等号

javascript - NightmareJs + Jquery返回空的JSON响应

javascript - 分散多个图像元素html的更快方法