Javascript JSLint错误报告-这有什么问题?
我犯了这个错误,不知道是什么原因造成的。有什么想法吗 第2127行的问题字符18:不利于变量“sport”。 用于(sugested_sports中的运动)Javascript JSLint错误报告-这有什么问题?,javascript,jslint,Javascript,Jslint,我犯了这个错误,不知道是什么原因造成的。有什么想法吗 第2127行的问题字符18:不利于变量“sport”。 用于(sugested_sports中的运动) //生成数组 var sugested_sports=data.split(“,”); //预制部 var sporty_项目=“”; 用于(sugested_sports中的运动) { if(sugested_sports.hasOwnProperty(运动)){ 运动型_项目+=''; } } //插入DIV html(运动项目);
//生成数组
var sugested_sports=data.split(“,”);
//预制部
var sporty_项目=“”;
用于(sugested_sports中的运动)
{
if(sugested_sports.hasOwnProperty(运动)){
运动型_项目+='';
}
}
//插入DIV
html(运动项目);
thx很多。试试看
var sport;
for (sport in sugested_sports)
这将处理缺少的变量声明,并将其置于for循环之外(请参阅) Pointy的答案可能就是lint所抱怨的答案
但是,作为一般规则,在使用(…in…)的
时应小心。人们经常将此结构与C#中的foreach
或其他语言中的其他类似概念相混淆,而事实上它们并不相关。in
构造中的javascript迭代对象的每个成员,而不仅仅是集合中的值,包括方法和属性。如果您事先不知道它是如何工作的,这种行为通常会导致意外的副作用
例如:
x = ['one', 'two'];
for (var value in x) {
alert(value);
}
这将产生两个警报,第一个警报包含0
,第二个警报包含1
,特别是集合的索引
如果我们稍微改变一下:
x = ['one', 'two'];
x.method = function() {};
for (var value in x) {
alert(value);
}
这次我们得到了三个警报,0
、1
和方法
。这是我所指的意外行为。在
中使用是很好的,如果你知道它的作用,但我见过它不止一次吸引人们
以下两个示例都适用:
x = ['one', 'two'];
for (var i = 0; i < x.length; i++) {
alert(i);
}
x=['one','two'];
对于(变量i=0;i
JSHint/JSLint中的所有错误意味着您没有声明键/迭代器变量。正如,JSLint希望您在其作用域的顶部声明它(谷歌JavaScript提升
了解提升的更多信息,):
要使事情变得愉快,请将行
移到内部函数中。尽管从技术上讲它仍然在范围内,但JSLint不喜欢以前使用的“超级作用域”
function spam(d)
{
var fnTest;
fnTest = function (data) {
var row; // and JSLint is happy! ;^D
for (row in data)
{
if (data.hasOwnProperty(row))
{
console.log(data.row);
}
}
};
fnTest(d);
}
顺便说一句,James的担忧包含在OP插入的hasOwnProperty
检查中。去掉该检查,JSLint会抱怨,“for-in的主体应该被包装在if语句中,以过滤原型中不需要的属性” JSLint可能不会建议您这样做,但我会,为了迭代数组对象(或类似数组的对象),我始终强烈建议使用普通的for
循环,for in
语句用于枚举对象属性,使用此语句,即使使用hasOwnProperty
检查以避免枚举原型链上的属性,规范也不能保证迭代顺序,它可以是任意的,因此循环可能不会以数字顺序访问元素。另请参见:@CMS该链接坏了,不过谢谢你的提示,我也有这个问题。@Jordan,该页面是由archive.org保存的,你可以看到。+1非常同意,此外,迭代的顺序不受限制,属性(数组索引)可能不会以数字顺序访问,而且,如果Array.prototype
对象被扩展(像still do一样),这些属性也将被枚举……在这里声明var将导致另一个jslint错误。根据jslint,变量应该在作用域的顶部声明,即全局或函数作用域。如果您注意jslint,这是正确的。如果你不这样做,那没关系。匿名投票人想发表评论吗?如果没有一些信息,我无法解决您的问题(这个答案确实是JSLint在这里所做的,所以我很好奇)。
var sugested_sports = data.split(","),
sport,
sport_items = '';
for (sport in sugested_sports)
{
//
}
/*global data, identifier, DIVsuggestions */
// We'll pretend all of the above were passed in from a function's parameters
// by using JSLint's "global" keyword -- now you can paste this code into
// jslint.com and have it pass muster.
// make array
var sugested_sports = data.split(","),
sporty_items = '', // pre build DIV
sport; // <<<< **** DECLARE YOUR "KEY" HERE ****
for (sport in sugested_sports)
{
if (sugested_sports.hasOwnProperty(sport)) {
sporty_items += '<a href="#'+identifier[1]+'">'
+sugested_sports[sport]+'</a>';
}
}
// insert DIV
DIVsuggestions.html(sporty_items);
function spam(d)
{
var fnTest, row; // `row` is defined "too early"
fnTest = function (data) {
for (row in data)
{
if (data.hasOwnProperty(row))
{
console.log(data.row);
}
}
};
fnTest(d);
}
function spam(d)
{
var fnTest;
fnTest = function (data) {
var row; // and JSLint is happy! ;^D
for (row in data)
{
if (data.hasOwnProperty(row))
{
console.log(data.row);
}
}
};
fnTest(d);
}