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={}
vsvar Something=new Object()
最终可以保存字符,但最终这确实是一个偏好问题。还有一些人会告诉你,当你使用对象文字时,它更容易阅读。第三个原因是,如果有人覆盖了对象函数,这并不重要
使用每种方法都有一些优点,并对此进行了更广泛的讨论
无论哪种方式,如果您正在执行
newobject()
,并且启用了/*jshint newcap:true*/
选项,您都应该很好。以下是差异的摘要(摘自):
对象文本概念varx={}无论window.Object的状态如何,代码>都会成功
它们完全相等吗
不可以。可以覆盖全局对象
变量或对象.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();