JavaScript中的对象文字

时间:2014-02-03 07:35:41

标签: javascript

我多年来一直使用JavaScript,但我发现这不会导致语法错误:

http://jsfiddle.net/DerekL/V5wNu/

{
    var a = "Hello";
    alert("Hello world");
}
console.log(a);   //"Hello world"

虽然没有块范围,但它仍然可以像{}不存在一样。

我认为{}是一个Object文字,它内部接受的只有:

{
    key: content
    get function(){ ... }
    set function(){ ... }
}

但JavaScript解释器似乎知道它们是脚本,它只是像平常一样执行它。

我知道解释器会忽略JS中的一些关键字,例如

javascript:

如果将其添加到代码中的行:

var a = "Hello";
javascript: console.log(a);   //this will work

它仍然有效。

但根据该逻辑,如果{a: "b"}有效,为什么a: "b"无效?

2 个答案:

答案 0 :(得分:2)

a: "b"

有效。

block而不是object initializer时,它只是一个label(可以在break语句中使用),后跟一个无用的字符串文字。

注意:由于此处已有3个错误答案,我确切地说{...}如果前面的代码使得{{1}}需要表达式(http://www.2ality.com/2012/09/expressions-vs-statements.html

答案 1 :(得分:0)

编辑:好的,这太快了。

对象litterals是一对花括号,包含field : value(可以是对象litteral本身)对{{1}分隔的{可能为空的)列表}第

但是,(格式)有效的代码块也可以用相同的语法编写:

,

此处function a () { l: x }} 被视为标签,l是一个包含变量引用的声明。

使用上的差异将纯粹是语境上的(因此我只是部分的第一个答案)。

如果调用函数或初始化变量,则相同的构造将被解释为litteral对象

x