Javascript 为什么jslint不喜欢对象(obj)

Javascript 为什么jslint不喜欢对象(obj),javascript,jslint,Javascript,Jslint,取代 Object(obj) 与 它们完全相等吗 初步测试表明它们是 为什么第二个版本通过jslint而不是第一个版本?不确定您是否在简化它们,但这两个语句看起来都不是特别好。Crockford确实建议不要使用newobject()符号,并且更喜欢{},这是很多js开发人员都会遵循的 使用var Something={}vsvar Something=new Object()最终可以保存字符,但最终这确实是一个偏好问题。还有一些人会告诉你,当你使用对象文字时,它更容易阅读。第三个原因是,如果有

取代

Object(obj)

它们完全相等吗

初步测试表明它们是


为什么第二个版本通过jslint而不是第一个版本?

不确定您是否在简化它们,但这两个语句看起来都不是特别好。Crockford确实建议不要使用
newobject()
符号,并且更喜欢
{}
,这是很多js开发人员都会遵循的

使用
var Something={}
vs
var Something=new Object()
最终可以保存字符,但最终这确实是一个偏好问题。还有一些人会告诉你,当你使用对象文字时,它更容易阅读。第三个原因是,如果有人覆盖了对象函数,这并不重要

使用每种方法都有一些优点,并对此进行了更广泛的讨论


无论哪种方式,如果您正在执行
newobject()
,并且启用了
/*jshint newcap:true*/
选项,您都应该很好。

以下是差异的摘要(摘自):

对象文本概念
varx={}都会成功

它们完全相等吗

不可以。可以覆盖全局
对象
变量或
对象.prototype.constructor
属性以获得不同的结果

为什么第二个版本通过jslint而不是第一个

“错误”消息应告诉您:

使用对象文字符号{}或object.create(null)。
此消息实际上应该[仅]在
新对象
的使用情况下显示(在该情况下,它是非常合法的,因为和)。出于某种原因,jslint也为您的代码提供了警告,尽管它不适用。永远不要相信JsLint,它不理解您的代码,只会扫描它以寻找初学者的错误模式


您使用的
对象
功能完全正常,您没有尝试创建新对象。

这不仅正常,在大多数情况下,它是唯一的解决方案! 按建议创建(未定义)与对象(未定义)会导致类型错误

它还会导致不必要(甚至损坏)的对象副本:
创建(新日期()).getDate()

很可能是因为crockford不喜欢使用对象构造函数而不是使用{}。
{}.constructor(obj)
// Overwrite the Object function.
window.Object = 10;

// Execution of the following will raise: 
// "TypeError: number is not a function" (Chrome)
var x = new Object();