是否可以在 Javascript 中为数组重载 [] 运算符?
例如,我想修改括号的行为,以便当它访问超出范围的索引时,它返回 0 而不是undedined
.
我知道我可能会逃脱这样的事情:
function get(array, i) {
return array[i] || 0;
}
但这并没有真正按照我想要的方式修改数组的行为。
是否可以在 Javascript 中为数组重载 [] 运算符?
例如,我想修改括号的行为,以便当它访问超出范围的索引时,它返回 0 而不是undedined
.
我知道我可能会逃脱这样的事情:
function get(array, i) {
return array[i] || 0;
}
但这并没有真正按照我想要的方式修改数组的行为。
由于[]
不是运算符,因此您不能“覆盖”它,但您可以向Array
的原型添加属性,这在您的特定情况下可能会有所帮助。然而,这是一个不好的做法:
Array.prototype.get = function(i, fallback) { return this[i] || fallback; }
a = [1, 2, 3]
a.get(0, 42)
1
a.get(4, 42)
42
[]
不是运算符,您不能覆盖它。
您可以覆盖其他 javascript 对象的访问器(即覆盖['somespecificvalue']
写入或读取),但不能覆盖[]
数组。
我会补充说我很高兴你不能覆盖它。除了使整个应用程序不可读(在您阅读整个代码以确保没有更改之前无法理解基本句法元素以确保没有更改的应用程序是不可读的)之外,我没有看到这一点。