Почему при сортировке 1 меньше, чем true?
При приведении типов (во время операции вычитания) true приводится к 1. Эти два значения равны, и в результирующем массиве они следуют в том же порядке. что и в исходном. Можете проверить, поменяв true и 1 местами.
Они равны (в том смысле, что 1-true == 0 и true-1 == 0).
Сортировка в JS, вообще говоря, не stable, так что в отсортированном массиве они могут идти в любом порядке.

[2,5,true,1].sort((a,b) => a-b)
// [true, 1, 2, 5]