>> typeof Object
"function"
>> var Object = new Object();
>> typeof Object
"object"
>> var a = new Object()
TypeError: Object is not a constructor
爲什麼可以使用「對象」作爲有效的變量名?var Object = new Object();
>> typeof Object
"function"
>> var Object = new Object();
>> typeof Object
"object"
>> var a = new Object()
TypeError: Object is not a constructor
爲什麼可以使用「對象」作爲有效的變量名?var Object = new Object();
new Object()
將返回一個對象,如{}
。所以是的,typeof new Object() === "object"
。構造函數是(作爲任何構造函數的)函數,所以typeof Object === "function"
。
但是,如果將構造函數替換爲對象,那麼typeof Object === "object"
因爲Object
已成爲像{}
這樣的對象。它與typeof {} === "object"
的邏輯相同。
你在這裏做什麼用Object類構造函數已聲明的對象爲新的變量是 。 而當你使用Object()時,它將引用在名爲Object之前聲明的對象。
他知道這一點。他想知道爲什麼這是可能的,因爲他直觀的假設是在這種情況下令牌「對象」不能被重用。 –
@ TomalakGeret'kal準確。謝謝 – JohnJohnGa
這些都是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
你的代碼是否有效是由兩個因素控制:
在範圍中重新聲明的名稱「隱藏」在外部範圍內聲明的同名實體。這意味着您的本地變量Object
可能會隱藏其他地方存在的函數Object
。
對象已經是一個對象,也許? (而不是新對象的構造函數) – rabudde
@rabudde:我相信他的問題是「爲什麼我能做到這一點? - 爲什麼我不會得到類似'SyntaxError:賦值給關鍵字'的東西? (就像你在Python 3中獲得像'True = False'這樣的行 - 你可以在Python 2中完成) –
爲什麼你想關閉這個問題?關心評論? – JohnJohnGa