Javascript 为什么`{foo:1}`在控制台中计算为`1`,而`{foo:1,bar:2}`会导致错误?

Javascript 为什么`{foo:1}`在控制台中计算为`1`,而`{foo:1,bar:2}`会导致错误?,javascript,Javascript,我知道{}要么是一个对象,要么是一块代码,但今天我的同事问我为什么{foo:1}在进入控制台时可以工作,但是{foo:1,bar:2}会产生一个错误 为什么foo:1在控制台中计算为1?本身,{a:1}是一个块语句,其中a是一个标签 当然,在需要表达式的上下文中,它是一个对象文本: var o = { a: 1 }; {}不总是阻塞,您可以使用它创建一个对象(JSON样式) 比如说 var objectName = { propertyName:"Fiat", model:5

我知道
{}
要么是一个对象,要么是一块代码,但今天我的同事问我为什么
{foo:1}
在进入控制台时可以工作,但是
{foo:1,bar:2}
会产生一个错误


为什么
foo:1
在控制台中计算为
1

本身,
{a:1}
是一个块语句,其中
a
是一个标签

当然,在需要表达式的上下文中,它是一个对象文本:

var o = { a: 1 };

{}
不总是阻塞,您可以使用它创建一个对象(JSON样式) 比如说

var objectName = {
    propertyName:"Fiat", 
    model:500, 
    color:"white",
    methodName:function(a) {
        return a;
    }
};

objectName.methodName('aa');

objectName.propertyName

objectName[propertyName]
它们是积木

if(...){ .. }
while(...) { ... }
try(..) { ...} catch  { ...}

这完全取决于上下文:

function test() {
   var foo = {a:1}; // this is an object
   { alert('Hi mom!'); } // this is a block of code
   { a: 1 }; // also just a block of code, but `a:` is a label
}

如果
{}
块用于(in)相等测试(
=
===
!=
,等等)或赋值(
=
),则它是一个对象。所有其他上下文都是“一段代码”。

很抱歉,由于缺乏声誉,我没有在你的帖子下发表评论

你能详细解释一下“为什么我可以用JavaScript打印foo:1”吗

如果我运行这个代码

var t = {foo: 1};
var t = {foo: 1, bar: 2};
它将成为对象“t”的属性。如果使用此代码,将实现相同的行为

var t = {foo: 1};
var t = {foo: 1, bar: 2};
您可以通过“t.foo”和“t.bar”访问它,它将返回值“1”或“2”


您可以在这里阅读“object”的解释,具体取决于上下文,
{}
当然可以是一个(空的)对象(文本)。如何打印?“打印”==在控制台中执行?实际上,无论在哪里需要表达式,它都将是一个对象,这在测试和赋值以外的情况下是正确的。举一个例子,在
fun({a:1})
中,当用作函数参数时,它被解析为对象文本。从技术上讲,它是赋值,因为该值被赋值给函数参数列表中定义的任何变量。