Существует много очевидных преимуществ объявления размера массива, но я думаю, что большинство предполагаемых преимуществ - просто FUD, передаваемый.
Лучшая производительность! / Это быстрее!
Насколько я могу судить, разница между предварительным и динамическим распределением ничтожна.
Что еще интереснее, спецификация не заявляет, что массив должен быть установлен на заранее выделенную длину!
Из раздела 15.4.2.2 ECMA-262 :
Если аргумент len является Number и ToUint32 ( len ) равен len , то свойство length объекта Вновь созданный объект имеет значение ToUint32 ( len ). Если аргумент len является числом и ToUint32 ( len ) не равен len , возникает исключение RangeError .
Ненаучный забавный тестовый пример здесь: http://jsbin.com/izini
Это делает код более понятным!
Лично я не согласен.
Рассмотрите JavaScript, который вы написали в прошлом, и рассмотрите код, который вам, возможно, придется написать в будущем. Я не могу вспомнить ни одного момента, когда мне нужно было указать статический предел для одного из моих массивов. Я также утверждаю, что потенциальные проблемы ограничения массивов в javascript значительно перевешивают преимущества, которые дает людям знать, о чем вы думаете, без каких-либо реальных проверок. Давайте взвесить все за и против ...
Плюсы:
- Им будет легче понять, для чего предназначен код.
- Позже они смогут найти ошибки, вызванные вашим предположением (язык твердо в щеке)
Минусы:
- Быстрые взгляды могут легко спутать «new Array (10)» с «new Array ('10 ')», которые делают совершенно разные вещи!
- Вы накладываете произвольное ограничение на код без нормального ограничения длины, что заставляет вас писать множество кодов котельной пластины для проверки и поддержания ограничения.
- Вы накладываете произвольное ограничение на код, который, вероятно, можно было бы обобщить для работы с любой длиной значений.
- Вы делаете предположение о том, как люди будут читать ваш код, предполагая, что альтернатива будет менее запутанной.
Вы также можете написать:
//I assume this array will always be length 10
var arr = new Array();
В приведенном выше случае комментарий может быть даже предпочтительнее. Явное объявление намерения может избежать любой путаницы, к которой не привык использовать конструктор в качестве объявления намерения.
Хорошо, тогда ... почему вы думаете, что это даже там тогда?
Удобство. Когда они писали спецификации, я думаю, что они поняли две вещи.
- Для такого рода заданий будут использоваться разработчики из похожих языков.
- Реализации ECMAScript потенциально могут использовать его для повышения производительности.
Так что они положили его туда.
Спецификация определяет только использование параметра, а не то, как он должен быть реализован.