Все правильно получается. Ведь он возвращает позицию символа в переданной строке, а второй аргумент не режет строку, он просто задает начало писка в нужного символа, он не повлияет на возвращаемое значение (только на поиск). Получаете вы именно номер символа в вашей строке.
UPD:
По поводу
'Синий кит'.indexOf('', 9); // вернёт 9
'Синий кит'.indexOf('', 10); // вернёт 9
Тут ситуация в том, что номер начала поиска больше или равен длине строки (в котором ищем). А по спецификации, если искомая строка имеет нулевую длину, а начальный индекс поиска больше или равен длинны исходной строки, то всегда возвращается начальный индекс поиска. Если вы сделаете так:
'Синий кит'.indexOf('C', 10);
То искомая строка уже не с нулевой длинной, и если начальный поиск больше или равен длине строки, то по спецификации всегда возвращается -1.
Надеюсь правильно объяснил, если что, спрашивайте.