Почему максимальный индекс массива JavaScript составляет 4294967294, а не 4294967295?

1

Я изучаю JavaScript и недавно столкнулся с проблемой массива JavaScript.

Числовой индекс массива JavaScript описывается как 32 бит, я думаю, что его максимальный индекс равен 2 до 32 минус 1, но право на 2 равно 32 минус 2. Я не знаю, почему? Может ли кто-нибудь сказать мне?

  • 2
    Как вы определили максимально допустимый индекс массива?
  • 0
    @ Dogui Я пытаюсь использовать 4294967295 в качестве числового индекса массива, но я обнаружил, что он будет считаться строковым индексом, когда я вывожу его методом tostring. Итак, я определил, что его максимальный индекс 4294967294, но не 4294967295
Теги:

2 ответа

1
Лучший ответ

Проводя это, чтобы показать, что вы правильно указали, что максимальный INDEX равен 4294967294, так как это максимальная ДЛИНА -1, а максимальная ДЛИНА составляет 2 32 -1

Итак, от 0 до 4294967294 у вас есть 4294967295 элементов

Все массивы JS начинаются с 0

new Array(4294967295) - это самый большой массив, который вы можете определить, потому что вам нужно передать беззнаковый int в конструктор. Следовательно, самый большой индекс, который вы можете получить,

Массив MDN

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]); 
  • 0
    @ 4касл я обновил. Вы абсолютно правы
  • 0
    Я знаю, что вы имеете в виду. Но я не знаю, почему массив имеет только 4294967295 элементов, 32-разрядное целое число без знака имеет 4294967296 элементов, от 0 до 4294967295, почему массив javascript не может использовать 4294967295 в качестве числового индекса. Я не понимаю, Это.
Показать ещё 5 комментариев
0

Когда вы создаете массив с использованием конструктора Array, вы можете предоставить ему дополнительную длину следующим образом:

Длина массива - это 32-разрядное целое число без знака. длина массива может варьироваться от 0 до Math.pow(2, 32) - 1, которая равна 4294967295.

  • 1
    Явное указание на то, что ОП неправильный, даст гораздо лучший ответ, чем простое цитирование руководства (как это читается).
  • 0
    @deceze, конечно, хотя и сделает его более четким ответом, это также сделает его неправильным. ОП прав.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню