Я изучаю JavaScript и недавно столкнулся с проблемой массива JavaScript.
Числовой индекс массива JavaScript описывается как 32 бит, я думаю, что его максимальный индекс равен 2 до 32 минус 1, но право на 2 равно 32 минус 2. Я не знаю, почему? Может ли кто-нибудь сказать мне?
Проводя это, чтобы показать, что вы правильно указали, что максимальный INDEX равен 4294967294, так как это максимальная ДЛИНА -1, а максимальная ДЛИНА составляет 2 32 -1
Итак, от 0 до 4294967294 у вас есть 4294967295 элементов
Все массивы JS начинаются с 0
new Array(4294967295)
- это самый большой массив, который вы можете определить, потому что вам нужно передать беззнаковый int в конструктор. Следовательно, самый большой индекс, который вы можете получить,
arrayLength
Если единственным аргументом, переданным конструктору Array, является целое число от 0 до 2 32 -1 (включительно), это возвращает новый массив JavaScript с его значением длины, установленным для этого числа (Примечание: это означает массив пустых слотов arrayLength, не слоты с фактическими неопределенными значениями). Если аргументом является любой другой номер, генерируется исключение RangeError.
Википедия
Число 4 294 967 295, эквивалентное шестнадцатеричному значению FFFFFFFF, является максимальным значением для 32-разрядного целого числа без знака при вычислении. Следовательно, это максимальное значение для переменной, объявленной как целое число без знака
var arr = new Array(4294967294);
arr[arr.length-1]="one but last";
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]);
arr.push("Last");
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]);
arr.push("One too far");
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]);
Когда вы создаете массив с использованием конструктора Array, вы можете предоставить ему дополнительную длину следующим образом:
Длина массива - это 32-разрядное целое число без знака. длина массива может варьироваться от 0 до Math.pow(2, 32) - 1, которая равна 4294967295.