Javascript-在包含数学运算的安全字符串上使用eval的问题
Javascript - Issue using eval on a safe string containing mathematics operations
我在使用eval执行此安全操作时遇到了一些问题。
var s = "(4.4 / 2.2) * 4567";
alert(eval(s)); // gives 9134
var t = "(4.4 / 2.2) * 04567";
alert(eval(t)); //gives 4846
有人能向我解释一下为什么变量t上4567后面的0导致答案为4846吗。
Javascript将以零开头的数字解释为八进制。因此,底座8中的04567等于底座10中的2423。
您可以尝试使用正则表达式来移除零,或者使用外部库来解析表达式。
这将是一种方式,例如:
var expression = "(4.4 / 2.2) * 04567".replace(/'d+/g, function(val){
return parseInt(val, 10)
});
alert(eval(expression));
该代码将所有数字替换为基数为10的版本。请注意,该解决方案需要进行修改才能适用于小数或负数。
在Javascript中,前缀为0的数字被视为八进制。
以下是八进制数的示例:
01234,-077 0312
正八进制数必须以0(零)开头,后跟八进制数字
负八进制数必须以-0开头,后跟八进制数字。
使用可以克服
var t = "(4.4 / 2.2) * Number(04567)";
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- 递归使用 eval() 是检查程序执行的好方法吗?
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何修复由于在java脚本中使用eval()而在强化扫描中的动态代码评估问题
- Javascript-在包含数学运算的安全字符串上使用eval的问题
- 使用eval()执行用户提供的代码的问题
- javascript 中的 eval() 问题
- .each()和eval()的问题
- JS eval安全问题
- 使用eval和alternative解析大型json时出现问题
- fnObj=window[functionName]不是函数问题-eval()运行良好
- Javascript,又一个“太多的递归”问题:复仇的邪恶eval()