Чтобы выяснить, почему метод делает то, что он делает, хорошая стратегия - подумать о том, как он реализован.
Я не знаю нативную реализацию метода split()
для JS, но мне приходит в голову, что алгоритм перебирает строку в поисках пропущенного разделителя, сохраняет левую часть строки и затем продолжается до завершения.
Это элементарная версия функции разбиения с условием, что он соответствует разделителю из одного символа:
function split(string, separator) {
let substring = '';
const results = [];
// Iterate over the characters of the string
for (let index = 0; index < string.length; index++) {
const character = string[index];
// Check if we found the separator
if (character === separator) {
// Save the current stored substring
results.push(substring);
// Set the new substring as empty
substring = '';
} else {
// Add the character to the substring
substring += character;
}
}
results.push(substring);
return results;
}
Очевидно, что метод String.prototype.split()
не реализован подобным образом, но я думаю, что он должен следовать той же логике c (с учетом более сложных разделителей, таких как как слова или регулярные выражения).
Я надеюсь, что это проясняет, почему возвращаемый результат - 2 пустые строки (в вашем случае), потому что:
-
substring
начинается по умолчанию как пустая строка (""
) - После нахождения
separator
, substring
(который является пустой строкой) сохраняется в массиве results
и затем устанавливается на пустую строку ng снова. - Наконец, после проверки всего
string
(в данном случае только 1 символ "/"
), оставшиеся substring
(также пустая строка) сохраняются в results
.
ПРИМЕЧАНИЕ: split()
не ограничивается массивом из двух элементов и потенциально может возвращать массив такой же длины исходной строки (например, при вызове его с пустым разделителем строк).