Обратите внимание, что shift удаляет не первый хранящийся в массиве элемент, а элемент с индексом 0, даже если его там нет. Об этом сказано в статье, но для наглядности пример.
var a = [];
a[1]=1; a[2]=2; a[3]=3;
var b = a.shift();
console.log(a, b);
// [1, 2, 3] undefined
max3d прав, shift() удаляет и возвращает первый элемент массива, даже если это ячейка с индексом false (а не [0]), вот пример с подтверждением этого:
var a = [];
a[1]=1; a[2]=2; a[3]=3;//
alert (0 in a);//false, нет ячейки [0], просто не задали ее
alert (a[0]);//undefined
alert (a);//,1,2,3
var b = a.shift();//
alert ("shift() вернул "+b);//shift() вернул undefined
alert (0 in a);//true
alert (a[0]);//1
alert (a);//1,2,3
alert ("аналогично, если выбить элемент массива delete");//выбьем ячейку [0], хотя изначально она была
var a = [0, 1, 2, 3];
delete a[0];
alert (0 in a);//false, нет ячейки [0], ее удалили, но не сдвинули индексы
alert (a[0]);//undefined
alert (a);//,1,2,3
var b = a.shift();//
alert ("shift() вернул "+b);//shift() вернул undefined
alert (0 in a);//true
alert (a[0]);//1
alert (a);//1,2,3
shift удаляет первый элемент, и он является всегда 0-м, в примере выше, посмотрите на длинну массива:
var a = [];
a[1] = 5
console.log(a.length)//2
a.shift()
console.log(a.length)//1
Особенность в том, что при использовании напрямую индекса, создаются очень много элементов со значением undefined (если они не существовали), с индексами до этого элемента.
Потому что a[0] у вас в первой строке устанавливается 5, и во второй не меняется.
То есть, после преобразований второй строки массив будет иметь вид [5, 6, 11, 7, 8, 9, 10, 1]. Следовательно, shift() извлекает нулевой элемент, который равен 5.
Замечу, что на больших массивах этот метод работает значительно более медленно чем pop(), так как сдвигает каждый элемент.
Нет. Сдвигается лишь указатель на нижний край двусторонней очереди, которой по факту является массив.
Обратите внимание, что shift удаляет не первый хранящийся в массиве элемент, а элемент с индексом 0, даже если его там нет. Об этом сказано в статье, но для наглядности пример.
неверно. удаляет и возвращает первый элемент массива. Затем сдвигает оставшиеся.
max3d прав, shift() удаляет и возвращает первый элемент массива, даже если это ячейка с индексом false (а не [0]), вот пример с подтверждением этого:
var a = [];
a[1]=1; a[2]=2; a[3]=3;//
alert (0 in a);//false, нет ячейки [0], просто не задали ее
alert (a[0]);//undefined
alert (a);//,1,2,3
var b = a.shift();//
alert ("shift() вернул "+b);//shift() вернул undefined
alert (0 in a);//true
alert (a[0]);//1
alert (a);//1,2,3
alert ("аналогично, если выбить элемент массива delete");//выбьем ячейку [0], хотя изначально она была
var a = [0, 1, 2, 3];
delete a[0];
alert (0 in a);//false, нет ячейки [0], ее удалили, но не сдвинули индексы
alert (a[0]);//undefined
alert (a);//,1,2,3
var b = a.shift();//
alert ("shift() вернул "+b);//shift() вернул undefined
alert (0 in a);//true
alert (a[0]);//1
alert (a);//1,2,3
Неправда. Именно элемент с индексом 0.
var a = []; a[1] = 1; a[2] = 2; a.shift()
вернет undefined
shift удаляет первый элемент, и он является всегда 0-м, в примере выше, посмотрите на длинну массива:
Особенность в том, что при использовании напрямую индекса, создаются очень много элементов со значением undefined (если они не существовали), с индексами до этого элемента.
var a = [5,4,3,2,1,2,3,1];
a[1]=6; a[2]=11; a[3]=7; a[4]=8; a[5]=9; a[6]=10;
var b = a.shift();
console.log(a, b);// (7) [6, 11, 7, 8, 9, 10, 1] 5
Объясните построчно почему такой ответ и при таком коде?
Потому что a[0] у вас в первой строке устанавливается 5, и во второй не меняется.
То есть, после преобразований второй строки массив будет иметь вид [5, 6, 11, 7, 8, 9, 10, 1]. Следовательно, shift() извлекает нулевой элемент, который равен 5.