Я не видел никакой формулировки того, что эти методы на самом деле делают с точки зрения сложности операций, что и помогло мне в концептуализации: в сущности, я считаю, что это называется «сдвигом», потому что на самом деле он должен сдвигать все элементы в вашем массиве с новыми индексами для правильного обновления свойства длины.
push () и pop () используют более простую операционную сложность. Независимо от того, какое число из n значений в вашем массиве или в файле array.length, push или pop всегда будет выполнять 1 операцию. Ему не нужно иметь дело с индексами, ему не нужно итерировать, ему нужно только выполнить одну операцию, всегда в конце стека, либо добавляя, либо удаляя значение и индекс.
Самое главное, обратите внимание при использовании push / pop, что другие элементы в массиве не затрагиваются - они имеют одинаковые значения в тех же индексах вашего массива. Длина массива также автоматически обновляется в соответствии с тем, что вы ожидаете при удалении или добавлении значений.
С другой стороны, shift () и unshift () не только добавляют или удаляют, но и фактически должны «сдвигать» все другие элементы в вашем массиве в разные индексы. Это более сложно и занимает больше времени, потому что количество операций зависит от n, количества элементов в вашем массиве или array.length. Для каждого n + 1, большего, он должен сделать еще 1 операцию, чтобы сдвинуть каждое из значений в правильный индекс, должным образом обновляя длину должным образом.
В противном случае, если бы он не выполнил n операций после shift () и переместил бы другие элементы, у вас не было бы элемента с индексом 0, и это не изменило бы длину вашего массива, не так ли? Мы хотим, чтобы длина наших массивов обновлялась интуитивно, а для сдвига и снятия приходится выполнять больше операций, чтобы выполнить это.