JavaScript将字符串转换为操作符



我试图在比较中将操作符的字符串表示转换为操作符本身。


例如,像

{obj1} '==' {obj2}

应:

{obj1} == {obj2}

{obj1} '!==' {obj2}

应:

{obj1} !== {obj2}

我可以使用eval(),但这强制要比较的对象转换为字符串,导致===(严格类型检查)比较无效。

例如,在下面的例子中,eval会给出错误的结果:

const obj = "5"
const obj2 = 5
const operator = '===';
eval(`console.log(${obj} ${operator} ${obj2})`) //outputs true, incorrect (obj is of type string, obj2 is of type number)
console.log(obj === obj2) //outputs false, correct

我该如何处理?


可能方法

我想到的一种方法是通过if else阶梯,让js处理比较,而不是解析比较操作符。

之类的
if(condition === '!=='){
return before_OrderRequest.Id !== after_OrderRequest.Id
}else if (condition === '==='){
return before_OrderRequest.Id === after_OrderRequest.Id
}
//...more if statements

可以用操作符的字符串表示定义一个对象,作为返回执行相应比较的箭头函数的属性。

const compare = {
'==': (a, b) => a == b,
'!=': (a, b) => a != b,
'===' : (a, b) => a === b,
'!==' : (a, b) => a !== b
}
const obj1 = 1;
const obj2 = 2;
console.log(compare['=='](obj1, obj2))
console.log(compare['!='](obj1, obj2))
console.log(compare['==='](obj1, obj2))
console.log(compare['!=='](obj1, obj2))

如果你正在处理类似的问题,请理解我的问题是建立在一个错误的前提之上的。请允许我解释一下……

如果你看一下我的示例可执行代码片段,你会注意到我在

下面使用了eval
eval(`console.log(${obj} ${operator} ${obj2})`)

但是我的这种用法是错误的,在这里我使用字符串插值,这是强迫obj2的值变成一个字符串。

正确的用法应该如下…

const obj = "5"
const obj2 = 5
const operator1 = '===';
const operator2 = '!==';
eval(`console.log(obj ${operator1} obj2)`) //outputs false which is correct
eval(`console.log(obj ${operator2} obj2)`) //outputs true which is correct
console.log(obj === obj2) //outputs false which is correct

将此添加为答案,而不仅仅是编辑问题,以便为面临类似挑战的人提供上下文。

最新更新