javascript - 在枚举中使用 NONE 值而不是 undefined
问题描述
我只是想知道这一点,因为我在代码中已经看过几次了。在 typescript 枚举中检查 undefined 有时会导致像本例中那样的意外行为。
enum DoSomething {
VALUE1,
VALUE2,
VALUE3,
}
function doSomething(doSomething?: DoSomething): void {
if (doSomething) {
console.log('do something')
} else {
console.log('do nothing')
}
}
doSomething(undefined) // -> do nothing
doSomething(DoSomething.VALUE1) // -> do nothing
doSomething(DoSomething.VALUE2) // -> do something
这当然是因为枚举的 VALUE1 实际上是 0。在枚举的第一个位置使用 NONE 之类的东西并且不允许 undefined 以防止其他人遇到这种情况是否有意义?
enum DoSomething {
NONE,
VALUE1,
VALUE2,
VALUE3,
}
function doSomething(doSomething: DoSomething): void {
if (doSomething) {
console.log('do something')
} else {
console.log('do nothing')
}
}
doSomething(DoSomething.NONE) // -> do nothing
doSomething(DoSomething.VALUE1) // -> do something
doSomething(DoSomething.VALUE2) // -> do something
我的意思是当然你总是可以明确地检查 undefined ......但是如果你没有考虑 if(0) 可能需要一些时间来找出错误,因为它只对枚举的第一个值失败。有什么想法/意见吗?
解决方案
您的问题基本上是关于代码约定的,这也可能取决于您工作的公司。您的示例过于抽象,并且违反了不依赖于公司的代码约定。
正如您所说,根据具体情况,您将明确检查未定义,如果有人通过它可能是一个真正的问题。您也可以认为“某人”有责任确保不传递错误的参数,在您的情况下是保留关键字。
但是为了得到答案,我会说,是的,这可能是有道理的,但不一定要这样做,具体取决于情况和您的指导方针:
enum DoSomething {
DoNot= 0,
Do = 1,
AlsoDo = 2,
}
推荐阅读
- python - 使用 Flask 部署分类模型
- c++ - gdb "skip" 命令不能跳过 libc++ 头文件
- html - Bootstrap 导航栏下拉菜单在 Catalina 上不起作用?
- java - 如何在 NotificationListnerService 的帮助下在通知中按下标记为已读按钮?
- c++ - 从一对迭代器构造 std::vector。允许调用哪些元素构造函数?
- php - 我可以让 Azure 应用使用 mail() 函数发送电子邮件吗?
- algorithm - 最坏情况分析
- javascript - 有没有办法在 react-native 的单独文件中定义自定义对象的道具?
- amazon-web-services - Amazon Cognito Oauth2 Native App:最佳实践
- excel - VBA:有没有办法获取/读取模块属性?