最近,我通过Crockford的JSLint运行了一些我的JavaScript代码,它给出了以下错误:
第1行问题1:缺少"使用严格"声明.
做一些搜索,我意识到有些人会加入"use strict";他们的JavaScript代码.一旦我添加了语句,错误就会停止显示.不幸的是,谷歌没有透露这个字符串声明背后的历史.当然它必须与浏览器如何解释JavaScript有关,但我不知道效果会是什么.
那么它是"use strict";什么,它意味着什么,它是否仍然相关?
当前的任何浏览器都会响应"use strict";字符串还是将来使用?
我包括声明:
"use strict";
Run Code Online (Sandbox Code Playgroud)
在我的大多数Javascript文件的开头.
JSLint之前从未对此提出过警告.但现在是,说:
使用"use strict"的功能形式.
有谁知道"功能形式"会是什么?
我在这个JavaScript代码上运行了JSLint,它说:
第32行的问题字符30:缺少基数参数.
这是有问题的代码:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
我在JavaScript中使用数组(包括w3schools和devguru)阅读的大多数教程都建议您可以使用var test = new Array(4);语法将整数传递给Array构造函数来初始化具有一定长度的数组.
在我的js文件中大量使用这种语法之后,我通过jsLint运行了一个文件,它吓坏了:
错误:第1行字符22处的问题:预期')'而是看到'4'.
var test = new Array(4);
第1行第23个问题:预期';' 而是看到')'.
var test = new Array(4);
第1行字符23处的问题:预期标识符而不是')'.
通过阅读jsLint对其行为的解释后,看起来jsLint并不真正喜欢new Array()语法,而是[]在声明数组时更喜欢.
所以我有几个问题.首先,为什么?我是否因使用new Array()语法而冒任何风险?是否存在我应该注意的浏览器不兼容性?第二,如果我切换到方括号语法,有没有办法声明一个数组并将其长度全部设置在一行,或者我必须做这样的事情:
var test = [];
test.length = 4;
Run Code Online (Sandbox Code Playgroud) 我目前正在验证我对JSLint的JavaScript并取得进展,它正在帮助我编写更好的JavaScript - 特别是在使用Jquery库时.
现在我所遇到JSHint,一个叉的JSLint.
所以我想知道很多JavaScript驱动的Web应用程序,这是更好或最适用的验证工具:
我想现在决定验证机制并继续前进,将其用于客户端验证.
和jshint和jslint之间的区别?请在单个javascript示例中解释.
链接:
jshint - http://www.jshint.com/
jslint - http://jslint.com/
++和 -
已知++(增量)和 - (减量)运算符通过鼓励过多的诡计来导致错误的代码.它们仅次于故障架构,可以实现病毒和其他安全威胁.有一个plusplus选项禁止使用这些运算符.
我知道像PHP这样的PHP结构$foo[$bar++]可能很容易导致一个错误,但是我无法找到一个更好的方法来控制循环而不是一个while( a < 10 ) do { /* foo */ a++; }或for (var i=0; i<10; i++) { /* foo */ }.
jslint是否突出显示它们是因为有些类似的语言缺少" ++"和" --"语法或者处理方式不同,还是有其他理由可以避免我可能会丢失的" ++"和" --"?
这是我使用const时得到的错误:
<error line="2" column="1" severity="warning" message="'const' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz)." source="jshint.W104" />
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
const Suites = {
Spade: 1,
Heart: 2,
Diamond: 3,
Club: 4
};
Run Code Online (Sandbox Code Playgroud)
代码工作正常只有JSHint每次都警告我.
我在我的JavaScript文件中使用了JSLint.它抛出了错误:
for( ind in evtListeners ) {
Run Code Online (Sandbox Code Playgroud)
第41行的问题字符9:for的主体应该包含在if语句中,以过滤原型中不需要的属性.
这是什么意思?
这个基于构造函数的语法创建对象有什么区别:
person = new Object()
Run Code Online (Sandbox Code Playgroud)
...和这个文字语法:
person = {
property1 : "Hello"
};
Run Code Online (Sandbox Code Playgroud)
虽然JSLint更喜欢使用对象文字表示法,但它们似乎都做同样的事情.
哪一个更好,为什么?
什么是对于那么最好的做法是什么?
Jslint解释说它"增加了混乱".我真的不明白......
编辑:代码,按要求:
var all,l,elements,e;
all = inElement.getElementsByTagName('*');
l = all.length;
elements = [];
for (e = 0; e < l; (e++))
{
if (findIn)
{
if (all[e].className.indexOf(className) > 0)
{
elements[elements.length] = all[e];
}
} else {
if (all[e].className === className)
{
elements[elements.length] = all[e];
}
}
}
Run Code Online (Sandbox Code Playgroud) javascript ×10
jslint ×10
jshint ×2
syntax ×2
arrays ×1
const ×1
node.js ×1
object ×1
radix ×1
use-strict ×1