var a = {};
a.constructor //function Object() { [native code] }
{}.constructor //Uncaught SyntaxError: Unexpected token .(…)
在控制台输入以上代码,出现的情况.
为什么呢,a 和 {} 的constructor 不应该都有并且一样吗?
label:{
while(true){break label;}
alert(false);
}
{}作为结构体解析不是不够智能,而是确实有其他用途的歧义。
直接写{}
不行,解释器会将这个当成语句块来解释,而不是当做对象字面量
加个括号就好了:({}).constructor
。这样写是强制转成表达式,而只有对象字面量可以作为表达式,语句块不行,所以这样就没有歧义了,解释器也就不会犯糊涂了
({}).constructor
啥意思,没啥特殊反应啊
输出一样表示
function Object() { [native code] }
function Object() { [native code] }
同求解释...
有什么不对吗?
Node 5.7.0
> var a = {};
undefined
> console.log(a.constructor);
[Function: Object]
undefined
> console.log({}.constructor);
[Function: Object]
undefined
>
浏览器 Chrominum 核心 v46
var a = {};
undefined
console.log(a.constructor);
VM294:2 Object() { [native code] }
undefined
console.log({}.constructor);
VM389:2 Object() { [native code] }
undefined
你那个问题是 {}
作为起始语句出现的问题,你改成 ({}).constructor
就对了。