"Использовать литеральную литературу массива []" для var os_map = {}

Я не понимаю, почему я получаю сообщение об ошибке при запуске JSLint с файлом JavaScript.

Я получаю сообщение var os_map = {}; Problem at line 28 character 36: Use the array literal notation []., если я запустил этот код в JSLint. Параметры для JSLint следующие.

/*jslint onevar: true, browser: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */

Заявляющий объект (, который есть {}) должен быть в порядке, но JSLint предлагает использовать пустой массив (, который является [])

: Я нашел ответ. Я был неправ. Нет ничего плохого в var os_map = {}. Код был указан в сообщении об ошибке, потому что я не использовал "require strict";. Я получил сообщение об ошибке неправильно. Спасибо, что ответили на мои вопросы.

Ответ 1

Линия нарушения:

var os_autoload_inputs = new Array('searchInput', 'searchInput2',
                                   'powerSearchText', 'searchText');

JSLint делает не ожидать, чтобы видеть конструктор new Array, вы должны использовать [] вместо:

var os_autoload_inputs = ['searchInput', 'searchInput2',
                                   'powerSearchText', 'searchText'];

Почему?

1, Крокфорду не нравится new.

2, объект Array может быть переопределен:

Array = {};
new Array(); // TypeError: Array is not a constructor

3, Несоответствия использования, например:

var a = new Array(5); // empty 5 elements array
var b = [5]; // 1 element array containing the 5 number on index 0

См. также:

Ответ 2

Измените это:

var a = new Array(5);

для этого:

var a = new [].constructor(5);

Ответ 3

Я прочитал строку 28 в что код:

var os_autoload_forms = new Array('searchform', 'searchform2', 'powersearch', 'search' );

... где действительно было бы целесообразно использовать синтаксис литерала:

var os_autoload_forms = ['searchform', 'searchform2', 'powersearch', 'search' ];

Следует сказать то же самое о строке 27.

Ответ 4

Проблема с символом строки 16: Используйте литеральную запись массива []. если я запустил этот код в JSLint. Параметры для JSLint следующие.

просто

var arrayName = [];