Vue.js + Safari で Array に対して for in していた結果、臨死体験
$set
パワー。
期待されていたもの
for in (before): [0, 1, 2]
for in (after): [0, 1, 2]
map: [0, 1, 2]
Safari がくれたもの
for in (before): [0, 1, 2]
for in (after): [0, 1, 2, 0, 1, 2]
map: [0, 1, 2]
$set
でフシギなパワーがエンチャントされる
var p1 = document.querySelector('#before')
var p2 = document.querySelector('#after')
var p3 = document.querySelector('#map')
var v = new Vue({ data: { array: null } })
var a = [0, 1, 2]
var b1 = []
for(var i in a){ b1.push(a[i]) }
p1.innerHTML = b1.join(', ')
v.$set('array', a) // <- ここでうまれかわる
var b2 = []
for(var i in a){ b2.push(a[i]) }
p2.innerHTML = b2.join(', ')
p3.innerHTML = a.map(function(n){ return n }).join(', ')
JSFiddle での実行
Tracing an array with "for in" Man in Safari will be unhappy. - JSFiddle (Safari でみよう)