2011-09-20 153 views
4
>> typeof Object 
"function" 

>> var Object = new Object(); 

>> typeof Object 
"object" 

>> var a = new Object() 
TypeError: Object is not a constructor 

爲什麼可以使用「對象」作爲有效的變量名?var Object = new Object();

+0

對象已經是一個對象,也許? (而不是新對象的構造函數) – rabudde

+1

@rabudde:我相信他的問題是「爲什麼我能做到這一點? - 爲什麼我不會得到類似'SyntaxError:賦值給關鍵字'的東西? (就像你在Python 3中獲得像'True = False'這樣的行 - 你可以在Python 2中完成) –

+0

爲什麼你想關閉這個問題?關心評論? – JohnJohnGa

回答

2

new Object()將返回一個對象,如{}。所以是的,typeof new Object() === "object"。構造函數是(作爲任何構造函數的)函數,所以typeof Object === "function"

但是,如果將構造函數替換爲對象,那麼typeof Object === "object"因爲Object已成爲像{}這樣的對象。它與typeof {} === "object"的邏輯相同。

Object is not a keyword at all.

+0

aaand所以這是沒有問題的「超載」功能「對象」 – rabudde

+0

@rabudde:我不這麼說;事實上,這樣做肯定是不好的做法。但從技術上講,它可能不會產生任何錯誤。 – pimvdb

0

你在這裏做什麼用Object類構造函數已聲明的對象爲新的變量是 。 而當你使用Object()時,它將引用在名爲Object之前聲明的對象。

+0

他知道這一點。他想知道爲什麼這是可能的,因爲他直觀的假設是在這種情況下令牌「對象」不能被重用。 –

+0

@ TomalakGeret'kal準確。謝謝 – JohnJohnGa

2

這些都是reserved words在JavaScript:

break 
case 
catch 
continue 
debugger 
default 
delete 
do 
else 
finally 
for 
function 
if 
in 
instanceof 
new 
return 
switch 
this 
throw 
try 
typeof 
var 
void 
while 
with 
1

你的代碼是否有效是由兩個因素控制:

  • Object is not a "reserved word"

  • 在範圍中重新聲明的名稱「隱藏」在外部範圍內聲明的同名實體。這意味着您的本地變量Object可能會隱藏其他地方存在的函數Object

相關問題