作者:至上励合_安儿_466 | 来源:互联网 | 2022-12-02 08:34
我有一些代码可以计算循环中哈希中键/值的总和.它似乎是在ios9 Safari上以不同的方式计算总和,与其他任何地方相比.虽然我可以找到一种方法来修复这个单独的用例,但是我们在整个大型代码库中都使用了这种语法,所以我正在寻找一些理解
为什么会在ios9中发生这种情况
如果有一种全局修复它的方法适用于可能__ob__
在其上有Vue 对象的所有对象.
试试这里的代码: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!
更新:
在进一步调查之后,这似乎是ios9设备上的Safari中的一个错误.它既适用于带有键'0'的哈希值,也适用于数组.它似乎只是for-in
循环的问题. .forEach
,.reduce
等做工精细.https://liveweave.com/znUFU2展示了这一点.如果liveweave首先加载缓慢,则刷新页面几次.js fiddle/codepen/etc. 目前不适用于ios9.我已向Apple报告此事.