2017-04-21 10 views
-2

私はこれを遭遇したときに変数で遊んでいました。私はこれの理由を見つけることができませんでした。私はこれを理解したい。Java Sciptオブジェクトの宣言されていない変数へのアクセス

以下は明白である参照エラーのための例外を与える:

console.log(age);
が、同じことは、オブジェクトに対して行われたとき、それはあらゆる種類のエラーをスローしません。

var person = {}; 
 
console.log(person.age)

そして、興味深いことに、あなたが「人の物を確認したときに、何の年齢 'プロパティが存在しない:変数がすでに宣言されているかのようにそれは未定義の "出力します。

私たちは、直接このようにオブジェクトのプロパティを作成することができます理解

person.age = 3; 

ので、グローバルまたはローカル変数のために行うことができます。

a = 3 

しかし、それでもまだ、割り当てまたは宣言する前に、何かにアクセスグローバルスコープ変数またはローカルスコープ変数の場合に起こるように、例外またはエラーをスローする必要があります。以下は

+0

strictモードでは、 "a = 3"グローバル・デスクレレーションを防ぐことができます。 –

+0

*しかし、割り当てまたは宣言する前に何かにアクセスすることは、グローバル・スコープ変数またはローカル・スコープ変数の場合と同様に例外またはエラーを投げるべきです。 * - まあ、 "should"は意見の問題です。また、オブジェクトに対する多くの操作では、エラーをスローしない代わりに 'undefined'を返すのが便利です。 – nnnnnn

+0

@ VolkanSeçkinAkbayır:はい、私はそれを認識しています。私は別のものを求めている。 – pragun

答えて

1

何ら言及ageがないため

はい、明らかである参照エラーの例外を提供します。

しかし、オブジェクト上で同じことが行われた場合は、 種類のエラーは発生しません。

なぜでしょうか?有効な参照personでオブジェクトを参照していますが、このオブジェクトにはプロパティーageがないため、値undefinedが返されます。

+0

'年齢'変数はどこにも存在しません。 – pragun

+0

どういう意味ですか?この 'person.age'のように書くとき、' age'は変数/参照ではありません。 'person'は変数/参照型ですが、' age'は 'person ['age']'のように書くことができます。これは文字列であることを示しています –

+0

私が意味するのは、 「人物」オブジェクト内にある。プロパティが定義されていない場合、 'person.age'はどのように有効な参照ですか?そして人物['年齢']としてそれを書いてもそれは文字列にはならない。これは、ブラケット記法でpersonオブジェクトのプロパティにアクセスする方法の1つです。私があなたの回答から理解していることは、オブジェクト内のプロパティは、変数を扱う際に扱われないということです。それは...ですか? – pragun

関連する問題