JSLint Javascript调试器:我应该调试这些问题吗?

时间:2011-02-12 17:13:48

标签: javascript jslint

刚刚开始在我之前购买的某些代码上使用 JSLint 。它破坏了许多代码......你对这些方面有什么看法?我应该重写它们吗?如果是的话,怎么能修复它们?

第5行第23个问题:使用数组文字符号[]

var radios = new Array();

第22行的问题:'focustextareas'在定义之前使用了

function focustextareas(){

第125行的问题:预期'==='而是看到'=='

else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivI...

第133行的问题:预期条件表达式而不是看到作业

while(elem = document.getElementById("optionsDiv"+g))

第136行的问题字符13:预期'{'而是看到'返回'

return g;

4 个答案:

答案 0 :(得分:3)

以下是我的意见

使用文字[]表示法是一种很好的做法,因为它可以避免在使用构造函数时出现一些令人困惑的情况。而且,它要短得多。

//var radios = new Array();
var radios = [];

===使用较不复杂的算法,避免了==可能导致的一些混淆,因此我尽可能使用===

//else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivI...
else if(elem.className==="optionsDivVisible") {elem.className = "optionsDivI...

我个人并不介意这个。

while(elem = document.getElementById("optionsDiv"+g))

我假设这是前一个while语句的单个语句。我不介意,但与此同时,我不认为你应该总是将你的陈述放在一个{}区块中,这是不好的建议。

return g;

答案 1 :(得分:2)

你真的应该(如果你还没有)阅读the docs for JSLint。第一句话说:“JSLint会伤害你的感情。”

JSLint由Doug Crockford编写,表达了他(非常有根据的)代码质量和易错编码的观点。 JSLint不仅会发现错误,还会发现“错误的编码风格”。 Crockford在very interesting video和他的书"JavaScript: The Good Parts"中解释了JSLints建议背后的原因。

答案 2 :(得分:1)

5: Use the array literal notation [ ]许多程序员更喜欢[]因为它更短 22: 'focustextareas' was used before it was defined函数可以在定义之前使用,但在一些带闭包的复杂情况下,这将是一个有用的警告。
125: Expected '===' and instead saw '=='并不重要,类名始终是一个字符串 133: Expected a conditional expression ...只是一个有用的警告 136: Expected '{' and instead saw 'return'很难说。从上下文中取出的这条消息看起来很傻。

答案 3 :(得分:1)

JSLint对于指出JavaScript中常见的陷阱非常有用,对于经验不足的JavaScript开发人员尤其有用。其中一些是合理的,几乎无可争议的好建议。然而,其中一些仅代表其作者的观点,其中一些观点非常主观。以下是我对您给出的示例的看法:


  

第5行第23个问题:使用数组文字符号[]

好建议。与使用Array构造函数相比,数组文字更短,更安全,更不明确。


  

第22行的问题:'focustextareas'在定义之前使用了

好建议。 JavaScript有函数声明函数表达式,其行为不同,因为函数声明创建的函数可用于定义它们的整个范围,而由函数表达式创建的范围则不是。以下是有效的:

foo();
function foo() {}

......而以下情况并非如此:

foo(); // TypeError
var foo = function() {};

这里的问题是,如果你为函数表达式重构了一个函数声明,那么如果在声明函数之前使用了该函数,你的代码就会停止工作。


  

第125行的问题:预期'==='而是看到'=='

     

else if(elem.className ==“optionsDivVisible”)

<强>可疑。无需更改。这会提醒您注意的是==会输入强制(其规则会导致某些不直观的结果),而===则不会。但是,在这种情况下,两个操作数都保证是字符串(只要elem确实是DOM元素),在这种情况下=====被指定执行完全相同的步骤使用一个在另一个上没有任何好处。


  

第133行的问题:预期条件表达式而不是看到作业

     

while(elem = document.getElementById(“optionsDiv”+ g))

很好的建议,但无需更改。我觉得这种结构很方便并且可以使用它,但它突出了潜在的错误来源:=====意图而不是=然后这不会引发错误并导致难以诊断的错误。


  

第136行的问题字符13:预期'{'而是看到'返回'

     

返回g;

<强>不确定即可。需要更多代码。