Javascript 为什么[]。anyName提供未定义的。但对于其他对象,如;{};

Javascript 为什么[]。anyName提供未定义的。但对于其他对象,如;{};,javascript,Javascript,步骤: 在chrome控制台中键入: [].anyName 这个很好用。 但是当我们打字的时候 {}.anyName 它给出了错误 因为{}在赋值或函数的参数中没有上下文,只是一个块语句,它们返回未定义的 当您在控制台中输入{}并单击enter时,结果是未定义的,因为这是一条刚刚完成工作的块语句,并且没有显式的返回语句(不能从块语句返回),默认情况下返回未定义的 当您在控制台中输入[]并单击“输入”时,结果为[],因为这将创建一个新数组。[]这是一个数组,您可以将方法添加到数组原型中,因此当

步骤: 在chrome控制台中键入:

[].anyName
这个很好用。 但是当我们打字的时候

{}.anyName
它给出了错误


因为{}在赋值或函数的参数中没有上下文,只是一个块语句,它们返回未定义的

当您在控制台中输入
{}
并单击enter时,结果是未定义的,因为这是一条刚刚完成工作的块语句,并且没有显式的返回语句(不能从块语句返回),默认情况下返回未定义的


当您在控制台中输入
[]
并单击“输入”时,结果为[],因为这将创建一个新数组。

[]这是一个数组,您可以将方法添加到数组原型中,因此当您键入[].anyTime这意味着您要在数组原型中搜索一个不存在的anyTime方法,因此这将为您提供一个未定义的方法,但您不能访问{}。任何时候都可以使用这种方式,因为它是一个对象,您可以像这样访问对象
var obj={};obj.anyTime

输出的错误会给出一个强烈的提示。。。{} ... 这是一个空代码块还是一个空对象?可能是
数组
对象
构造函数的原型设计问题。我尝试了这两种方法,但在两种情况下都未定义,但在输出中没有抛出任何错误。你能解释一下你的问题吗。在Object.InjectedScript.\u evaluateOn(:905:140)在Object.InjectedScript.\u evaluateAndWrap(:838:34)在Object.InjectedScript.evaluate(:694:21)@Satpal-在
{}.anyName
警报({}.anyName)
之间有很大的区别,
{}
意味着什么是闭包?我以为它是一个空块语句是的,它不是JS术语中的“闭包”,你应该称它为空块。还值得注意的是,块不能在括号内,这就是为什么
({})
返回一个对象。所以问题是,为什么
[]
在执行
[]之前创建数组。anyName
{}
不会在
{}之前创建和对象。anyName
会根据上下文解释{},因此如果它是单独的{},它没有创建任何对象,因为JS决定它是一个块,而不是一个对象文字。{}不一定是一个对象,取决于上下文,在问题上下文中它被认为是一个空的块语句。在这个问题中,他谈论的是对象,阅读标题JavaScript不会根据意图解释代码。。。阅读我的评论,javascript将{}解释为块语句。。。无论人们多么希望或希望或愿意将{}视为所使用上下文中的对象,javascript仍然会将{}解释为问题中所使用上下文中的块语句