Javascript数组越界函数



在javascript中,当一个索引超出数组的边界时,它会用undineds进行扩展。

是否有任何函数调用发生在幕后?

例如:

var w = []
for (i = 0; i < 10; i++) {
w[(i << 4) + 15] = i
}

我正在尝试一些原型中毒练习,我注意到一个数组的索引超出了它的范围,所以如果可能的话,我希望修改与此相关的函数。

您可以使用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/';

您可以这样覆盖Array.prototype

注意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)

最新更新