Как строго отделить Array от Object?
Это что троллинг?
Для определения массива достаточно Array.isArray 
Для определения объекта:function isObject(item) {
  return (typeof item === "object" && !Array.isArray(item) && item !== null);
}
Если в вашем коде возникают трудности с определением типа данных могу порекомендовать использовать TypeScript или Flow.
Еще старайтесь писать читаемый код. Использование ни о чем не говорящих аргументов, отсутствие пробелов между операторами и операндами, и !0, !1 вместо true, false не очень хорошая практика.
newaitix, да, согласен с Антон Спирин , у вас всё запущено.
Постараюсь проще объяснить отличия  NodeList от Array.
Они наследуют свои основные свойства совершенно от разных прототипов. И единственными общими прототипами для них являются Object и null.
Для проверки можно также использовать instanceof.if (obj instanceof Array) console.log('obj isArray!');