Привет.
Интересует именно почему Javascript ведёт себя именно так.
Предисловие.
В общем рещил я напихать
slice всякими разными значениями и увидел, что результат разный.
Логически я могу их обосновать, что ты увидишь дальше, но почему JS решил, что будет именно так, я так и не допёр.
Что стоит знать:
- Метод
slice принимает в любой из параметров число. Если приходит не число, то JS старается преобразовать к числу. Это легко доказать. Стоит только передать boolean -array.slice(false, true);
- Значениями по-умолчанию первого параметра равно
0, а второго array.length - 1
Суть.
Давай передадим в
slice -
undefined.
По Флэнэгану
undefined при приведение к числу превращается в
NaN. Для дальнейшего расследования это важно.
const array = [1, 2, 3, 4, 5];
let newArray = array.slice(undefined); // [1, 2, 3, 4, 5]
let newArray = array.slice(undefined, undefined); // [1, 2, 3, 4, 5]
let newArray = array.slice(undefined, 2); // [1, 2]
let newArray = array.slice(2, undefined); // [3, 4, 5]
Кажется, что
slice не понимает, что происходит и вместо
undefined ставит значение по-умолчанию и такая работа ясна.
Теперь заполним
slice -
NaN
Ожидается, что будет работать как
undefinedNaN при приведение к числу, собственно,
NaNconst array = [1, 2, 3, 4, 5];
let newArray = array.slice(NaN); //[1, 2, 3, 4, 5]
let newArray = array.slice(NaN, NaN); //[]
let newArray = array.slice(2, NaN); // []
let newArray = array.slice(NaN, 2); // [1, 2]
А здесь складывается ощущение, что
NaN это
0
Null и NaN работает одинаково. Собственно вопрос, почему именно так?