2017-04-21 31 views
-2

當我遇到這種情況時,我正在玩變量。我找不到這個原因。我想了解這一點。訪問Java Scipt對象的未聲明變量

下面給出了引用錯誤的例外,這是顯而易見的:

console.log(age);

但是當同樣的事情在對象上完成的,它不拋出任何類型的錯誤。它打印出「未定義」彷彿變量已經聲明:

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

有趣的是,當您檢查「人」的對象,不存在「年齡」屬性。

我明白,我們可以直接對對象執行這樣的新屬性:

person.age = 3; 

,因此可以爲全局或局部變量來實現:

a = 3 

但儘管如此,分配或聲明之前訪問的東西應該拋出一個異常或錯誤,就像它發生在全局或局部作用域變量的情況下一樣。

+0

嚴格模式可以防止「a = 3」全局刪除 –

+0

*「但是,在分配或聲明**之前訪問某些內容時,應該像拋出全局或局部範圍變量時發生異常或錯誤一樣。 * - 那麼,「應該」是一個意見問題。對於對象的很多操作,它很方便,它*不會拋出錯誤,而是返回'undefined'。 – nnnnnn

+0

@ VolkanSeçkinAkbayır:是的,我知道這一點。我正在問一些不同的東西。 – pragun

回答

1

下面給出了引用錯誤的異常是顯而易見的

是的,因爲沒有參考age

但是當對象完成同樣的事情時,它不會拋出任何 類錯誤。

爲什麼會產生呢?您通過有效引用person引用對象,並且由於此對象沒有屬性age,因此將返回值undefined

+0

但'年齡'變量不存在任何地方。 – pragun

+0

你是什麼意思?當你像這樣寫'person.age'時,'age'不是一個變量/引用。 'person'是變量/引用,而'age'可以這樣寫'person ['age']',這表明它現在是一個字符串 –