Это определенно ошибка!И это очень серьезная ошибка.
Ошибка связана с оптимизацией инициализаторов массива, в которых все значения являются примитивными литералами.Например, учитывая функцию:
function buildArray() {
return [1, null, 'x'];
}
Все возвращенные ссылки на массивы из вызовов к buildArray()
будут ссылаться на одну и ту же память, а некоторые методы, такие как toString()
, будут кэшировать свои результаты.Обычно для сохранения согласованности любая изменяемая операция с такими оптимизированными массивами копирует данные в отдельное пространство памяти и ссылается на него;этот шаблон называется копирование при записи , или сокращенно CoW.
Метод reverse()
изменяет массив, поэтому он должен инициировать копирование при записи.Но это не так, потому что оригинальный разработчик (Кит Миллер из Apple) пропустил случай reverse()
, хотя он написал много тестов.
Эта ошибка была сообщена Apple в21 августа. Исправление появилось в хранилище WebKit 27 августа и было выпущено в Safari 12.0.1 и iOS 12.1 30 октября 2018 года.