Javascript 为什么Object.prototype.hasOwnProperty.call(编号“toString”)返回false?

Javascript 为什么Object.prototype.hasOwnProperty.call(编号“toString”)返回false?,javascript,google-chrome,ecmascript-6,Javascript,Google Chrome,Ecmascript 6,并暗示: Object.prototype.hasOwnProperty.call(foo,“bar”)等同于(并且比)foo.hasOwnProperty(“bar”) 但是,当运行Chrome 75.0.3770.142时,我看到: Number.prototype.hasOwnProperty(“toString”)//true Object.prototype.hasOwnProperty.call(数字,“toString”)//false 问题: 这些不应该返回相同的值吗 假

并暗示:

  • Object.prototype.hasOwnProperty.call(foo,“bar”)
    等同于(并且比)
    foo.hasOwnProperty(“bar”)
但是,当运行Chrome 75.0.3770.142时,我看到:

  • Number.prototype.hasOwnProperty(“toString”)//true
  • Object.prototype.hasOwnProperty.call(数字,“toString”)//false
问题:

  • 这些不应该返回相同的值吗
  • 假设我处理的动态类型可能与内置类型相同,也可能与内置类型不同,那么在这种情况下我应该在哪里使用

  • 实际上,您正在检查两件不同的事情:

    • Number.prototype.hasOwnProperty(“toString”)
      将检查
      Number
      对象的原型是否包含
      toString
      属性,并且它不是来自其原型链(具有Own属性)
    • Object.prototype.hasOwnProperty.call(Number,“toString”)
      Number.hasOwnProperty(“toString”)
      基本相同-它不检查原型,而是检查
      Number
      对象本身
    这里可以看到两个不同的对象:


    console.log(Number==Number.prototype)
    嗯,您首先检查
    Number
    prototype,然后只检查
    Number
    <代码>编号!==Number.prototype@VLAZ你是说我应该调用
    Object.prototype.hasOwnProperty.call(Number.prototype,“toString”)
    来代替吗?是的,因为你目前正在做
    Number.prototype.hasOwnProperty
    vs
    Number.hasOwnProperty
    @VLAZ很好,谢谢。如果你将此作为答案发布,我会将其标记为已接受。