如何将二进制文字传递给 JavaScript eval

How do I pass a binary literal to JavaScript eval?

本文关键字:JavaScript eval 文字 二进制      更新时间:2023-09-26

在我开始之前,请不要告诉我不要使用eval;我知道输入非常卫生,因此安全、快速且简单。

正在使用JavaScript引擎来为我用Java编写的计算器提供动力。为此,我只需将输入连接成一个字符串并将其传递给 JavaScript。例如,单击1+5 按钮会导致生成字符串"1+5"。我也通过在字母之前放0x来为十六进制工作,所以A+8给了我"0xA+8。我的问题来自编程它的二进制模式。我尝试将其传递0b1101+0b10(这是Java进行二进制文字的方式),但它只是抛出了一个错误。如何在 JavaScript 中处理二进制文字?

更新:从 ES2015 开始,JavaScript 支持二进制Number文字:

console.log(0b1101+0b10) // 15 (in decimal)

或者,您可以使用字符串,并使用以 2 为基数的 Number.parseInt

var a = parseInt('1101', 2) // Note base 2!
var b = parseInt('0010', 2) // Note base 2!
console.log(a+b) // 15 (in decimal)

为了以不同的基数显示数字,Number#toString也接受一个基数:

(15).toString(2) // 1111

注意:如果将用户输入直接传递给eval(),请使用正则表达式来确保输入仅包含数字和您期望的运算符(+-等)。