Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSLint错误报告-这有什么问题?_Javascript_Jslint - Fatal编程技术网

Javascript JSLint错误报告-这有什么问题?

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(运动项目);

我犯了这个错误,不知道是什么原因造成的。有什么想法吗

第2127行的问题字符18:不利于变量“sport”。 用于(sugested_sports中的运动)

//生成数组
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);
}