在Mac Chrome JS控制台中,我遇到以下结果:
{}的计算结果为Object()
{};评估为未定义
分号如何影响之前的内容?
这与ASI或其他解析规则有关吗?
答案 0 :(得分:0)
这是因为JS将{}
解释为object literal,而{};
变成了code block。
可以通过将其放在一对括号中来避免:({});
将返回一个对象。
答案 1 :(得分:0)
Chrome实际上会像对待{}
一样评估({})
,因此强制解释器将其视为对象文字而不是空白的块;
{
console.log("the line starts with { so it's treated is an empty block, not an object");
}
({}) //this is an object that is discarded after the line is read
要说明它实际上是一个空块,请参见以下代码:
{} == {} //syntax error because the effective code is "== {}"
并与此代码进行比较
({}) == {} //force the left side to be an object
在上面,没有错误,因为它得到了正确的评估,然后删除了结果。
以下是语法错误,因此在 情况下,Chrome会默默地删除括号
({};)