【发布时间】:2014-08-19 02:47:36
【问题描述】:
两者都将检测对象而不是基元。
这似乎是纯粹的语法差异。
// jslint prefers {}.constructor(obj) over Object(obj)
// called isObject by underscore
// will test only for objects that have writable keys
// for example string literals will not be detected
// but arrays will
var isWritable = function (obj) {
return {}.constructor(obj) === obj;
};
【问题讨论】:
-
我认为这可能与 javascript 的运行速度有关。
{}.constructor(obj)可能在大多数 javascript 引擎中都有某种Object(obj)没有的优化。 -
@user,你的意思是
({}).constructor(obj)吗?纯{}.constructor(obj)导致我的浏览器出现语法错误。 -
我在上面发布的代码工作正常。但是当我把它分解并放在控制台中时,我得到了和你一样的错误。很奇怪。
-
@user,没关系,那是
return关键字。它可以防止解析器将{}解释为空语句块。该代码确实运行良好。 -
我唯一能想到的是
Object不是保留字,所以混蛋可以说:Object = function(x) { /* be a jerk */ }其中{}.constructor将始终为您提供对象构造函数。
标签: javascript jslint