В справочнике Adobe Illustrator CC Reference: JavaScript говорится, что activeDocument.layers хранит слои документа. Но на самом деле не все, а только верхний уровень.

Дополнительную информацию можно найти в Руководстве по созданию сценариев Adobe Illustrator, где вы найдете схему объектной модели Illustrator. Классы Layer и GroupItem могут содержать вложенные объекты одного и того же класса и так далее.

Решение

Чтобы узнать истинное количество слоев в документе Adobe Illustrator, вам понадобится рекурсивная функция. Пример:

var counter = 0; // I know it's not good to use a global variable
countingLayers(activeDocument.layers);
alert('True layers length: ' + counter);
function countingLayers(_layers) {
  for (var i = 0; i < _layers.length; i++) {
    var iLayer = _layers[i];
    if (iLayer.layers.length > 0) { 
      countingLayers(iLayer.layers);
    }
    counter++;
  }
}

Функция countingLayers() принимает в качестве входных данных все слои верхнего уровня. В цикле выясняем, содержит ли каждый слой подслои или нет. Если это так, функция вызывает себя с новым аргументом: все подслои текущего слоя.

В использовании

Я использовал аналогичную рекурсию в RenameItems, чтобы найти и заменить символы в именах слоев. Рекурсивные функции также хороши для перечисления всех вложенных групп или получения самого верхнего слоя, где находится объект.