Javascript:一种检查value是否为众多常量之一的优雅方式
Javascript: Elegant way to check if value is one of many constants
我有一个像这样的对象(打算作为enum工作):
var CardEnum =
{
CA: 101,
C2: 102,
C3: 103,
C4: 104,
C5: 105,
C6: 106,
C7: 107,
C8: 108,
C9: 109,
C10: 110,
CJ: 111,
CQ: 112,
CK: 113,
DA: 201,
D2: 202,
D3: 203,
D4: 204,
D5: 205,
D6: 206,
D7: 207,
D8: 208,
D9: 209,
D10: 210,
DJ: 211,
DQ: 212,
DK: 213,
SA: 301,
S2: 302,
S3: 303,
S4: 304,
S5: 305,
S6: 306,
S7: 307,
S8: 308,
S9: 309,
S10: 310,
SJ: 311,
SQ: 312,
SK: 313,
HA: 401,
H2: 402,
H3: 403,
H4: 404,
H5: 405,
H6: 406,
H7: 407,
H8: 408,
H9: 409,
H10: 410,
HJ: 411,
HQ: 412,
HK: 413
};
我有一个这样的函数:
function myFunc(card)
{
if (card == null)
{
// throw exception
}
// do something with card
}
我打算这样使用它:
myFunc(CardEnum.D7);
但是,如果有人像这样使用它,我如何确保它抛出异常:
myFunc(170);
myFunc(103.5);
我必须检查传递的值是否为CardEnum对象的关键值之一。有没有什么优雅的方法可以做到这一点,而不用遍历CardEnum对象的所有键?
说明一下,这是可以的:
myFunc(311);
最安全的做法是更改传递给函数的内容。
传递卡片名称,而不是它们的值:
function myFunc(card) {
if (!CardEnum[card]) {
// throw exception
throw new Error('Invalid card passed to myFunc!');
}
// do something with card
}
不叫myFunc(CardEnum.D7);
,叫myFunc('D7');
如果有允许0
作为值,这将工作:
if (!CardEnum[card] != null) {
然而,我建议不要使用!= null
,因为它也允许传递其他假值,如:" ',false, NaN.
这将是一个更安全的选择:
if (!CardEnum[card] && CardEnum[card] !== 0) {
尝试使用Object.hasOwnProperty()
var CardEnum = function() {
// object
this.card = {D7: 207};
this.myFunction = function(prop) {
// if `this.card` does not have property `prop`,
// passed as argument to `this.myFunction`,
// throw error
if (!this.card.hasOwnProperty(prop)) {
throw new Error(prop + " not found")
// else log `this.card[prop]` to `console`
} else {
console.log(this.card[prop])
}
};
};
// returns object containing `this.card` , `this.myFunction`
var card = new CardEnum();
// call `card.myFunction`
console.log(card.myFunction("D7"), card.myFunction("D123"))
var CardEnum = function() {
this.card = {
CA: 101,
C2: 102,
C3: 103,
C4: 104,
C5: 105,
C6: 106,
C7: 107,
C8: 108,
C9: 109,
C10: 110,
CJ: 111,
CQ: 112,
CK: 113,
DA: 201,
D2: 202,
D3: 203,
D4: 204,
D5: 205,
D6: 206,
D7: 207,
D8: 208,
D9: 209,
D10: 210,
DJ: 211,
DQ: 212,
DK: 213,
SA: 301,
S2: 302,
S3: 303,
S4: 304,
S5: 305,
S6: 306,
S7: 307,
S8: 308,
S9: 309,
S10: 310,
SJ: 311,
SQ: 312,
SK: 313,
HA: 401,
H2: 402,
H3: 403,
H4: 404,
H5: 405,
H6: 406,
H7: 407,
H8: 408,
H9: 409,
H10: 410,
HJ: 411,
HQ: 412,
HK: 413
};
this.myFunction = function(prop) {
if (!this.card.hasOwnProperty(prop)) {
throw new Error(prop + " not found")
} else {
console.log(this.card[prop])
}
};
};
var card = new CardEnum();
console.log(card.myFunction("D7"), card.myFunction("D123"))
相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 使用javascript存储变量的最安全方式
- 以可优化的方式使用requirejs加载模板
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 如何“;过滤器”;或者以其他方式重构该数据
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- Javascript以不同的方式声明数字
- 用Javascript实现PHP常量的最佳方式
- Javascript:一种检查value是否为众多常量之一的优雅方式
- 覆盖angularJS中模块值/常量的最佳方式