Tất cả các lỗi có nghĩa là trong JSHint/JSLint là bạn không tuyên bố chìa khóa của bạn/iterator biến. Như @Christopher suggests, JSLint muốn bạn phải khai báo nó ở phía trên của phạm vi của nó (google JavaScript hoisting
để biết thêm về treo, like this link):
/*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);
này bad for in variable
lỗi ở đây giảm xuống còn giống như một lỗi 'sport' was used before it was defined
nơi khác.
EDIT: Nó đáng nói rằng nếu for
bạn đang ở trong một chức năng nội bộ, bạn cần phải khai báo biến for in
của bạn trong bối cảnh đó tương tự. JSLint sẽ khiếu nại nếu bạn khai báo for in
trong ngữ cảnh gốc.
Ví dụ:
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);
}
Để thực hiện những điều hạnh phúc, di chuyển row
vào chức năng nội bộ. Mặc dù về mặt kỹ thuật vẫn còn trong phạm vi, JSLint không thích "superscope" đã được sử dụng trước đó.
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);
}
Bằng cách này, mối quan tâm của James được bao phủ bởi
hasOwnProperty
séc OP đã chèn vào. Đi ra kiểm tra đó, và JSLint sẽ khiếu nại, "Cơ thể của một trong nên được gói trong một tuyên bố nếu để lọc các thuộc tính không mong muốn từ nguyên mẫu".
Here's a little more on hasOwnProperty with for... in, if you're interested.
JSLint có thể không gợi ý cho bạn điều này, nhưng tôi sẽ, để * lặp * đối tượng mảng (hoặc đối tượng giống mảng), tôi luôn khuyên bạn nên sử dụng vòng lặp 'for' đơn giản, câu lệnh' for-in' được sử dụng để * liệt kê các thuộc tính của đối tượng, với câu lệnh này, ngay cả khi bạn sử dụng kiểm tra 'hasOwnProperty' để tránh liệt kê các thuộc tính trên chuỗi nguyên mẫu, thứ tự lặp lại là * không được bảo đảm * bởi spec, nó có thể tùy ý, vì vậy vòng lặp có thể không truy cập các phần tử theo thứ tự số. Xem thêm: [Enumeration Vs. Iteration] (http://bit.ly/9GPWDY) – CMS
@CMS liên kết đó bị hỏng, nhờ mẹo mặc dù tôi cũng gặp vấn đề này. – Jordan
@Jordan, trang đã được lưu trữ bởi archive.org, bạn có thể xem trang [tại đây] (http://web.archive.org/web/20101213150231/http://dhtmlkitchen.com/?category=/JavaScript/&date = 2007/10/21/& entry = Iteration-Enumeration-Primitives-and-Objects). – CMS