У меня есть некоторый код, который вычисляет сумму ключей / значений в хэше в цикле.Похоже, что вычисление суммы в Safari ios9 происходит иначе, чем где бы то ни было.Хотя я могу найти способ исправить этот индивидуальный вариант использования, мы используем этот тип синтаксиса во всей нашей большой кодовой базе, поэтому я ищу некоторое понимание
- , почему это происходит в ios9
- , если есть способ глобально исправить его, который будет применим ко всем объектам, на которых может быть объект Vue
__ob__
.
Попробуйте код здесь: https://liveweave.com/kKo88G. Я также вставил его ниже:
// Define a hash
var totalItems, sum, type, value
totalItems = {}
totalItems['0'] = 3
// This definition of __ob__ is done dynamically by Vue,
// but I include it here by way of example of what breaks in ios9
totalItems.__ob__ = new Object()
Object.defineProperty(totalItems, '__ob__', {
enumerable: false,
writable: true,
configurable: true
});
// Loop through the hash
sum = 0
for (type in totalItems) {
value = totalItems[type];
sum += value;
}
// sum is 6 in ios9 Safari -- it loops through the '0' key twice
// sum is 3 in all other browsers and newer ios versions!
ОБНОВЛЕНИЕ:
После дальнейших исследований это похоже на ошибку в Safari на устройствах ios9.Это относится как к хэшам с ключом «0», так и к массивам.Это только кажется, что проблема с for-in
петлями..forEach
, .reduce
и т. Д. Работают нормально.https://liveweave.com/znUFU2 демонстрирует это.Обновите страницу пару раз, если liveweave загружается медленно.JS Fiddle / Codepen / и т. д.не работает на ios9 в данный момент.Я сообщил об этом в Apple.