Estoy trabajando con proxies en js, pero algo es raro =>
let _usernames = []; _usernames = new Proxy(_usernames, { set(target, prop, val) { console.count(); //this execute for two times! if(typeof val === 'string') { target[prop] = val; return true; } else { return false; } } }); _usernames.push('Manuel'); La trampa Set debería llamar solo una vez cuando presiono la matriz, pero se ejecutó dos veces.
Y hay un error en la consola, cuando empujo a la matriz =>
Uncaught TypeError: proxy set handler returned false for property '"length"'¿Cómo puedo solucionar esto y lo que está mal?
Llamar Array#push hace que el set se llame dos veces:
En su caso, la segunda llamada devuelve falso ya que el valor de longitud es numérico.
Una posible solución:
let _usernames = []; _usernames = new Proxy(_usernames, { set(target, prop, val) { console.log(target, prop, val); if(typeof val === 'string' || prop === 'length') { target[prop] = val; return true; } else { return false; } } }); _usernames.push('Manuel');