https://jsfiddle.net/smfod698/1/
var m = '123'.match(/123/)
alert(m.slice(0))
function Cls() {
Object.defineProperty(Cls.prototype, "1", {})
}
new Cls()
var m2 = '123'.match(/123/)
alert(m2.slice(0))
调用 Object.defineProperty(),导致 array.slice() 返回的结果变得不正常了。
上面的代码,在我的 iPad (iOS 9.2.1)上运行,前一个对话框正常输出 123 ,后一个就只输出空字符串了。
而且只有当调用 Object.defineProperty() 时传入的是自然数格式的字符串时,才会发生这个问题。
例如: "0"、"1"、"1000",一直到 "4294967294" 都能触发此问题。
而 "00" 就不会。
我也测试了 Android 、 Windows 上的浏览器,都没有这个问题。
现在手头只有一个 iPad ,不知道在其他 iOS 设备上是不是有这个问题。
有大神知道这是怎么回事吗?
P.S.
Object.defineProperty 那段代码来自 Immutable.js 中对 Record 的定义。
'string'.match(/reg/).slice() 来自 react-router 中匹配路由的代码。
我的应用里同时使用了这两个类库,然后刚好又给 Record 定义了一个数字格式的字段,然后就发现路由不正常了,调试了一下午才把这个问题给揪出来
orz
1
wssgcg1213 2016-04-03 21:47:29 +08:00 1
os x 下的 safari 也有这个问题
|
2
anjianshi OP @wssgcg1213 多谢,看来应该跟 iOS 无关,是 Safari 的问题
|
3
cpylua 2016-04-03 22:36:49 +08:00 1
可能是 ios9 和 OS X El Capitan, iOS8 和 Yosemite 的 Safari 都没有问题
|