首页 > 关于constructor

关于constructor

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 就对了。

【热门文章】
【热门文章】