Javascript:检查值是否是许多常量之一的优雅方法
我有一个对象(打算用作枚举),如下所示:Javascript:检查值是否是许多常量之一的优雅方法,javascript,Javascript,我有一个对象(打算用作枚举),如下所示: 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,
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);
我有这样一个函数:
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);
我打算这样使用它:
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);
但是,如果有人这样使用它,我如何确保它抛出异常:
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
,因为这也允许传递其他falsy值,例如:`',false,NaN
这将是一个更安全的选择:
if (!CardEnum[card] && CardEnum[card] !== 0) {
尝试使用Object.hasOwnProperty()
var CardEnum=function(){
这张卡={
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,
丹麦:213,
SA:301,
S2:302,
S3:303,
S4:304,
S5:305,
中六: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,
总部:412,
香港:413
};
this.myFunction=函数(prop){
如果(!this.card.hasOwnProperty(prop)){
抛出新错误(prop+“未找到”)
}否则{
console.log(此.card[prop])
}
};
};
var card=new CardEnum();
console.log(card.myFunction(“D7”)、card.myFunction(“D123”))
您想在这里实现什么?如果用户可以向该函数发送任何数据,则他们可以删除您可以在该函数中添加的任何检查,以验证数据。使用CardEnum中的卡作为0
,false
或任何其他false值将在此函数中引发错误case@Tushar:所有有效卡都有真实值。在
中不需要CardEnum[card]
将只返回卡的号码,或者未定义的
。现在,是的!但在将来,当OP可能想要添加0
时,这会抛出错误,是否会向一副完整的牌组添加更多的牌?那是作弊。啊!我不知道那些是卡片。我想OP想检查卡中是否存在170
值,而不是键frommyFunc(170);myFunc(103.5)代码>示例,你怎么想。试着实际解释那里发生了什么。你改变了很多OP的代码,却没有解释它的功能。