为什么jslint比Object(obj)更喜欢{} .constructor(obj)

时间:2014-06-27 21:41:58

标签: javascript jslint

两者都会检测对象而不是基元。

这似乎是一种纯粹的语法差异。

// 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;
};

2 个答案:

答案 0 :(得分:4)

我不太确定,因为它不应该。如果您正在考虑表现,那么这与您应该做的相反。

根据this JSPerf test available which compares the speed of creating via new Object(), Object.create().new(), and Object.prototype.constructor()(与Object.constructor()相同);到目前为止Object.constructor()最慢​​的一个

谷歌的V8引擎使用new Object()的速度要快得多,因为它会大大优化通话,所以我真的不担心它。

JSPerf测试的结果:

Operation per second comparison of Object creation functions The graph results of the speed of the different Object creation functions in multiple browsers

答案 1 :(得分:1)

这是误报。使用Object,它更简洁,更清晰,更快。

JSLint does not expect to see new Object.” - 你should use an object literal instead是可以理解的。但是,错误地发出了相同的警告even if Object is called as a function。这可能是为了检测Object()创建,但使用参数调用Object没有任何问题。