面试题答案
一键面试枚举类型默认存储方式
在TypeScript中,数字枚举类型默认是以数字形式存储,从0开始自增(若未手动指定值)。例如:
enum Direction {
Up,
Down,
Left,
Right
}
// 此时Direction.Up = 0, Direction.Down = 1, Direction.Left = 2, Direction.Right = 3
字符串枚举类型则以字符串形式存储,每个成员必须手动赋值。例如:
enum Status {
Success = "success",
Failure = "failure"
}
内存占用过高场景
- 大型数字枚举:当数字枚举成员数量非常多(比如成千上万)时,会占用较多内存。因为每个成员都需要在内存中存储对应的数字值。
- 不必要的枚举使用:如果在一些场景下,本来可以简单使用常量替代枚举,却使用了枚举,可能会造成额外的内存开销。例如,只是表示固定的几个状态值,用常量对象就足够,但却用了枚举。
基础内存优化措施
- 使用常量替代简单枚举:对于不需要类型检查和反向映射功能的固定值集合,使用常量对象代替枚举。例如:
// 枚举
enum Color {
Red,
Green,
Blue
}
// 常量对象
const colorConstants = {
Red: 0,
Green: 1,
Blue: 2
};
- 精简枚举成员:如果数字枚举成员过多,考虑是否可以进行分组或者简化,减少不必要的枚举成员数量。
- 避免字符串枚举滥用:字符串枚举相对数字枚举会占用更多内存,尽量在必要时才使用字符串枚举,能用数字枚举实现的场景优先使用数字枚举。