Привет.
Интересует именно почему 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
Ожидается, что будет работать как
undefined
NaN
при приведение к числу, собственно,
NaN
const 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 работает одинаково. Собственно вопрос, почему именно так?