JavaScript 对象 return 值和控制台日志可以吗?
Can a JavaScript object return a value AND console log?
我有一个看起来像这样的对象:
const CONVERT = {
a: 1,
b: 2,
c: 100,
};
我是这样使用它的:
let x = 'a';
// some logic that may change x
const value = CONVERT[x];
假设我知道当 x = 'c' 这是一个错误条件。我想 console.error( 'value clamped at the limit of 100' ) 当 x = 'c'.
在 CONVERT 对象赋值中是否有一种优雅的方法可以做到这一点?我希望我能做这样的事情:
const CONVERT = {
a: 1,
b: 2,
c: ( ()=> { console.error( 'value clamped at the limit of 100' ); return 100; )(),
};
...但这不是 console.error 调用 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 中的 return 的值是 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);
我有一个看起来像这样的对象:
const CONVERT = {
a: 1,
b: 2,
c: 100,
};
我是这样使用它的:
let x = 'a';
// some logic that may change x
const value = CONVERT[x];
假设我知道当 x = 'c' 这是一个错误条件。我想 console.error( 'value clamped at the limit of 100' ) 当 x = 'c'.
在 CONVERT 对象赋值中是否有一种优雅的方法可以做到这一点?我希望我能做这样的事情:
const CONVERT = {
a: 1,
b: 2,
c: ( ()=> { console.error( 'value clamped at the limit of 100' ); return 100; )(),
};
...但这不是 console.error 调用 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 中的 return 的值是 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);