Safari 的 JS 引擎在执行优化上导致数组没有初始化。
找不到 Safari for IOS 的区,借地提问,在 IOS 上的 chrome 浏览器和 safari 浏览器中,使用 [] 创建的数组,有可能因为优化导致数组没有初始化。
测试机器的配置:
Iphone 7, Iphone XS
IOS 12.1
重现代码如下:
function doFrame() { var count = 10000; while (count--) { mobileIOSChromeBug(); mobileIOSSafariBug(); } requestAnimationFrame(doFrame); } function mobileIOSChromeBug() { var one = Math.random() < 0.5 ? [1, 2] : undefined; var two = Math.random() < 0.5 ? [1, 2] : undefined; var array = [0, 0, 0, 0]; if (one) { array[0] = one[0]; array[1] = one[1]; } if (two) { array[2] = two[0]; array[3] = two[1]; } else if (array[2] !== 0) { alert('chrome error:' + array.join(',')); } } function mobileIOSSafariBug() { var array = [0, 0, 0]; if (Math.random() < 0.5) { array[0] = 1; array[1] = 1; } if (Math.random() < 0.5) { array[2] = 3; } else if (array[2] !== 0) { alert('safari error:' + array.join(',')); } } setTimeout(doFrame, 10);
[经过版主编辑]