2011-09-20 107 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

相关问题