为什么(3).constructor有效,而(3)中的“构造函数”无效?

时间:2010-11-04 13:35:12

标签: javascript constructor javascript-objects

(3).constructor是Number,但"constructor" in (3)是TypeError,为什么?

2 个答案:

答案 0 :(得分:3)

in运算符的规范解释了这一点。具体来说,请参见语义评估的第5步。

11.8.7 in运算符

ShiftExpression中的生产RelationalExpression:RelationalExpression评估如下:

  1. 让lref成为评估RelationalExpression的结果。
  2. 让lval成为GetValue(lref)。
  3. 让rref成为评估ShiftExpression的结果。
  4. 让rval为GetValue(rref)。
  5. 如果Type(rval)不是Object,则抛出 TypeError 异常。
  6. 使用参数ToString(lval)返回调用[[HasProperty]] rval内部方法的结果。
  7. (3).constructor工作的原因是理解起来有点困难,但实际上当你在带有原始基础的引用上使用点运算符时,它会被提升到一个对象中。

答案 1 :(得分:3)

使用property accessor时,数字3会变成 Number 的对象。并且该类型的对象具有构造函数,因此具有constructor属性。

但是as ChaosPandion already pointed outin operator需要正确的表达式来生成一个对象,但3不是一个对象而是一个普通的数字文字。