en javascript cuando un índice está fuera de los límites de la matriz, se amplía con indefinidos.
¿Hay llamadas de función detrás de escena?
Por ejemplo:
var w = [] for (i = 0; i < 10; i++) { w[(i << 4) + 15] = i }Estoy probando algunos ejercicios de envenenamiento de prototipos y noté que se usa una matriz con índices fuera de sus límites, por lo que espero modificar las funciones relacionadas con esto si es posible.
Puede anular Array.prototype de esta manera:
¡NOTA los límites en el bucle for!
for (let i = -1000; i < 1000; i++) { Object.defineProperty(Array.prototype, i, { get() { if (this[`_${i}`] === undefined) return 'No value'; // or throw new Error('No value'); return this[`_${i}`]; }, set(v) { return this[`_${i}`] = v; }, }); } const arr = []; console.log(arr[1]); // No value arr[1] = 'I have a value'; // set value console.log(arr[1]); // get the value 'I have a value' console.log(arr[-1]); // No value console.log(arr[-100]); // No value console.log(arr[0]); // No value console.log(arr[100]); // No value console.log(arr[10000]); // undefined (because of the limits are -1000 to 1000)Puedes usar Proxy :
const arr = new Proxy([], { get(target, property) { return target[property]; }, set(target, property, value) { // do your work here ... for example: print some values: console.log('oldValue=', target[property]); console.log('newValue=', value); console.log('index=', property); // set the new value - default behaviour target[property] = value; // Return true if successful. In strict mode, returning false will throw a TypeError exception. return true; }, }); arr[3] = 'https://sidanmor.com/';