«Использовать буквенное обозначение массива []» для var os_map = {} - PullRequest
11 голосов
/ 20 декабря 2009

Я не понимаю, почему я получаю сообщение об ошибке при запуске 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";. Я получил сообщение об ошибке неправильно. Спасибо за ответы на мои вопросы.

Ответы [ 4 ]

33 голосов
/ 20 декабря 2009

Оскорбительная строка:

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

Смотри также:

3 голосов
/ 01 марта 2014

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

var a = new Array(5);

для этого:

var a = new [].constructor(5);
1 голос
/ 20 декабря 2009

Мое чтение строки 28 в , код :

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

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

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

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

0 голосов
/ 11 ноября 2014

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

просто сделай

var arrayName = [];

...