В реальной жизни, условия в JS могут действительно достигать кошмарных размеров и становиться нечитаемыми, даже если выносить их в переменные, а то и целые функции.
Dmitri1998, потому что шифт может вернуть андефайнд, если массив пустой, очевидно же.
Брать значение по индексу, фактически, тоже может, но по дефолту это не так.