search

Home  >  Q&A  >  body text

JavaScript 里 in 运算符继承属性的问题

var o = new Object();

o.OwnProperty('toString')  // false

'toString' in o   // true

里这句

'toString' in o

这句为何会返回 true?

巴扎黑巴扎黑2901 days ago265

reply all(3)I'll reply

  • 迷茫

    迷茫2017-04-10 14:44:52

    obj.hasOwnProperty判断某属性是“自身属性”还是“继承自原型对象的属性”;
    in操作符判断的是该对象的某属性是否存在且可枚举;

    reply
    0
  • 黄舟

    黄舟2017-04-10 14:44:52

    我觉得你不应该奇怪in,反而应该奇怪hasOwnPropery吧。不信你运行o.hasOwnProperty('hasOwnProperty')试试。关于这个MDN上不是已经讲的很详细了么:

    Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain.
    Object.prototype.hasOwnProperty

    所以你可以这么理解:hasOwnProperty是检查自己真正拥有的属性,不检查继承的属性;而in是只要在对象内的属性都会检查。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 14:44:52

    这个toString方法是从Object对象继承来的,@merb_tu 说的对

    reply
    0
  • Cancelreply