为什么`{foo:1}`在控制台中评估为“1”,而`{foo:1,bar:2}`会导致错误?

时间:2015-08-10 16:47:45

标签: javascript

我知道{}是一个对象或代码块,但今天我的同事问我为什么{foo: 1}在进入控制台时有效,但是{foo: 1, bar: 2}生成一个错误。

为什么foo: 1在控制台中评估1

4 个答案:

答案 0 :(得分:8)

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

当然,在期望表达式的上下文中,它是一个对象文字:

var o = { a: 1 };

答案 1 :(得分:0)

{}不会一直阻止,你可以用它制作一个对象(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  { ...}

答案 2 :(得分:0)

这完全取决于背景:

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}相等性测试({}=====等...)或作业({{ 1}}),然后它是一个对象。所有其他上下文都只是“一块代码”。

答案 3 :(得分:0)

我很抱歉由于缺乏声誉而不在您的帖子下发表评论。

你能详细说明"为什么我可以用JavaScript打印foo:1"?

如果我运行此代码

console.log(this.Entertainment.hour)

它将成为对象" t"的属性。如果您使用此代码

,将实现相同的行为
var t = {foo: 1};

你可以通过" t.foo"来访问它。和" t.bar"并且它将返回值" 1"或" 2"。

你可以阅读"对象"的解释。这里JavaScript Objects