我有一个看起来像这样的对象:
const CONVERT = {
a: 1,
b: 2,
c: 100,
};
我正在像这样使用它:
let x = 'a';
// some logic that may change x
const value = CONVERT[x];
说我知道x ='c'时这是一个错误情况。当x ='c'时,我想console.error('值限制为100'的限制)。
在CONVERT对象分配中是否有一种优雅的方法来做到这一点?我希望我可以做这样的事情:
const CONVERT = {
a: 1,
b: 2,
c: ( ()=> { console.error( 'value clamped at the limit of 100' ); return 100; )(),
};
...但是,这并不会安慰控制台。调用CONVERT ['c']时会出错,而是在实例化CONVERT对象时立即执行此操作。
我能想到的唯一选择是:
let x = 'a';
// some logic that may change x
const value = CONVERT[x];
if( value === 100 ) {
console.error( 'value clamped at the limit of 100' );
}
但这意味着无论我在哪里使用CONVERT,我现在都需要执行此额外的if-check,以便我可以console.error所需的消息。如果我知道x不等于'c',我想避免完全执行if-check。
我的另一选择是摆脱CONVERT对象,而将if-else或switch这样的代码硬编码:
let value;
if( x === 'a' ) {
value = 1;
} else if( x === 'b' ) {
value = 2;
} else if( x === 'c' ) {
value = 100;
console.error( 'value clamped at the limit of ', value );
}
同样,我希望我可以绕过查找对象的使用。
似乎您可能正在使用getter之后,该函数可以在属性访问时执行。从getter返回的值CONVERT['c']
是被评估为的值:
const CONVERT = {
a: 1,
b: 2,
get c() {
console.error( 'value clamped at the limit of 100' );
return 100;
}
};
let x = 'a';
x = 'c'; // some logic that may change x
const value = CONVERT[x];
console.log(value);