在JS中,数组不像其他语言(java、python)中那样安全,它具有动态性和弱类型性,切越界访问没有具体的报错,而是返回空,为提升数组的安全性,我们可以自行定义一个安全数组。
一、增加报错
与其他语言一样,增加IndexError,继承内置的Error对象。示例如下:
class IndexError extends Error {
constructor(message) {
super(message);
this.name = "索引越界";
}
}
这样,我们就可以通过throw语句,抛出new IndexError()异常。
二、定义安全数组类SafeArray
这里,可以使用ES6语法来定义,结构比较简单,也容易理解,示例如下:
class SafeArray {
#_array;
constructor(...initialArray) {
// 约定的私有属性
this.#_array = [...initialArray];
}
}
注意:上面代码中的 # 表示定义一个私有属性或方法(也就是说,只能在内部访问,不能在类的外部进行访问。),并不是所有的编译器都支持。因为它是ECMAScript 2022新增的语法。
三、添加你想要的getter和setter
1、返回长度
// 获取数组的长度
get length() {
return this.#_array.length;
}
这样,我们调用new SafeArray().length,就能得到安全数组的长度
2、可以添加sum属性
// 求和
get sum() {
return this.#_array.reduce((s, elt) => s+=elt, 0);
}
这样,调用.sum,就能计算数组中各元素相加的和,壮大了内置数组Array的功能。照这个思路,还可以添加更多的聚合函数,如求平均、最值等等。
四、编写安全数组的方法
确定好结构,与必要的属性之后,我们需要为安全数组提供一些必要的方法,如安全的获取元素,安全的添加元素,安全的查找元素等等。示例如下:
#_isValidIndex(index) {
return Number.isInteger(index) && index >= 0 && index < this.#_array.length;
}
// 安全地获取索引处的值,如果索引无效则返回undefined
getItem(index) {
if (this.#_isValidIndex(index)) {
return this.#_array[index];
}
throw new

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



