Javascript var Object=新对象();

Javascript var Object=新对象();,javascript,syntax,Javascript,Syntax,为什么可以使用“Object”作为有效的变量名?newobject()将像{}一样返回一个对象。所以是的,typeof new Object()=“Object”。构造函数(与任何构造函数一样)是一个函数,因此typeof Object==“function” 但是,如果用对象替换构造函数,则typeof object===“object”,因为object已成为类似{}的对象。这与typeof{}==“object”的逻辑相同 您在这里所做的是 使用对象类构造函数,您已将对象声明为新变量。 当

为什么可以使用“Object”作为有效的变量名?

newobject()
将像
{}
一样返回一个对象。所以是的,
typeof new Object()=“Object”
。构造函数(与任何构造函数一样)是一个函数,因此
typeof Object==“function”

但是,如果用对象替换构造函数,则
typeof object===“object”
,因为
object
已成为类似
{}
的对象。这与
typeof{}==“object”
的逻辑相同


您在这里所做的是 使用对象类构造函数,您已将对象声明为新变量。 当您使用Object()时,它将引用在命名对象之前声明的对象

“为什么“对象”不是特定的关键字?”

因为规范中没有这样定义

这些是JavaScript中的:

>> typeof Object
"function"   

>> var Object = new Object();

>> typeof Object
"object"

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

您的代码是否有效取决于两个因素:

  • 在作用域中重新声明的名称“隐藏”与在外部作用域中声明的名称相同的实体。这意味着您的局部变量
    Object
    可能会隐藏其他地方存在的函数
    Object


对象可能已经是对象了?(而且不是新对象的构造函数)@rabudde:我相信他的问题是“为什么我可以这样做?-为什么我不能得到类似
SyntaxError:assignment to keyword
?”(就像你在Python3中得到的类似
True=False
——你可以在Python2中这样做)为什么你想结束这个问题?想评论一下吗?@JohnJohnGa:你可以把问题说得更清楚。
var a={};(a)的类型=‘对象’aa所以“重载”函数“Object”@rabudde没有问题:我不是这么说的;事实上这样做肯定是不好的做法。但从技术上讲,这是可能的,因为它不会引起任何错误。他知道这一点。他想知道为什么这是可能的,因为他的直觉假设是标记
对象
不能在此上下文中重复使用。@TomalakGeret'kal正是如此。谢谢
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