Я немного поигрался с типизированными массивами с помощью Firefox 4 и заметил некоторые вещи.
Размер ArrayBuffer
, который можно создать, является целым числом вдиапазон [0..2147483647]
.Передача 2147483648
вызывает ту же ошибку, что и передача отрицательного числа, передача 4294967296
возвращает пустое ArrayBuffer
, а передача 4294967297
возвращает ArrayBuffer
с длиной 1
.Таким образом, я предполагаю, что значение размера интерпретируется как 32-разрядное целое число со знаком.
В то время как Int32Array
объекты могут создаваться по умолчанию только из ArrayBuffer
объектов, чья byteLength
равнакратное четырем, я был удивлен, что new Int32Array(new ArrayBuffer(2147483644));
заставил Int32Array
выдать ту же ошибку, которую я получил бы за пропуск ArrayBuffer
, который не кратен четырем, в то время как все остальные младшие кратные четырех работали какArrayBuffer
size.
Хотя первое, что я заметил, довольно нормально (хотя несколько расточительно, что целые числа со знаком, похоже, были выбраны), мне особенно любопытно второезаметил.Являются ли эти способы реализации формально определенными в какой-либо спецификации?