3

(3).constructorNumberですが、"constructor" in (3)TypeErrorなのはなぜですか?

4

2 に答える 2

3

プロパティアクセサを使用すると、数値3は数値のオブジェクトに変換されます。そして、その型のオブジェクトにはコンストラクターがあり、したがってconstructorプロパティがあります。

しかし、ChaosPandionがすでに指摘しているように、in演算子はオブジェクトを生成するために正しい式を必要としますが、オブジェクトで3はなく、単純な数値リテラルです。

于 2010-11-04T13:47:34.690 に答える
3

inオペレーターの仕様はこれを説明しています。具体的には、意味評価のステップ5を参照してください。

11.8.7in演算子

ShiftExpressionのプロダクションRelationalExpression:RelationalExpressionは、次のように評価されます。

  1. lrefをRelationalExpressionの評価結果とします。
  2. lvalをGetValue(lref)とします。
  3. ShiftExpressionを評価した結果をrrefとします。
  4. rvalをGetValue(rref)とします。
  5. Type(rval)がObjectでない場合は、TypeError例外をスローします。
  6. 引数ToString(lval)を使用してrvalの[[HasProperty]]内部メソッドを呼び出した結果を返します。

動作する理由(3).constructorは理解するのが少し難しいですが、基本的に、プリミティブベースの参照でドット演算子を使用すると、オブジェクトに持ち上げられます。

于 2010-11-04T13:39:34.397 に答える