>> 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