首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在不使用eval的情况下计算javascript中的字符串

在不使用eval的情况下计算JavaScript中的字符串,可以使用以下方法:

  1. 使用Function构造函数:可以通过将字符串作为函数体传递给Function构造函数来创建一个函数,并立即调用该函数来计算字符串。例如:
代码语言:txt
复制
var str = "1 + 2 * 3";
var result = new Function("return " + str)();
console.log(result); // 输出 7
  1. 使用数学运算函数:如果字符串中只包含数学运算表达式,可以使用JavaScript内置的数学运算函数来计算字符串。例如:
代码语言:txt
复制
var str = "1 + 2 * 3";
var result = eval(str);
console.log(result); // 输出 7
  1. 手动解析字符串:如果字符串中包含复杂的表达式,可以手动解析字符串并计算结果。这需要根据字符串的语法规则进行分析和计算。以下是一个简单的示例:
代码语言:txt
复制
var str = "1 + 2 * 3";
var tokens = str.split(" ");
var stack = [];
var operators = {
  "+": function(a, b) { return a + b; },
  "-": function(a, b) { return a - b; },
  "*": function(a, b) { return a * b; },
  "/": function(a, b) { return a / b; }
};

tokens.forEach(function(token) {
  if (operators[token]) {
    var b = stack.pop();
    var a = stack.pop();
    var result = operators[token](a, b);
    stack.push(result);
  } else {
    stack.push(parseFloat(token));
  }
});

var result = stack.pop();
console.log(result); // 输出 7

这些方法可以在不使用eval的情况下计算JavaScript中的字符串。它们提供了一种安全且可控的方式来执行动态生成的代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

盘点JavaScript中Eval函数的使用方法

因此不能从外部访问在 eval 中声明的函数和变量: // 提示:本教程所有可运行的示例都默认启用了严格模式 'use strict'eval("let x = 5; function f() {}...三、使用 “eval” 在 eval 中使用外部局部变量也被认为是一个坏的编程习惯,因为这会使代码维护变得更加困难。 有两种方法可以完全避免此类问题。...如果 \eval\ 中的代码,+没有使用外部变量,请以 window.\eval(...) 的形式调用 \eval\。...注: new Function 从字符串创建一个函数,并且也是在全局作用域中的。所以它无法访问局部变量。 四、总结 本文基于JavaScript基础,介绍了 Eval函数的使用。...在实际应用中需要注意的点,遇到的难点,提供了详细的解决方法。使用JavaScript语言,能够让读者更好的理解。代码很简单,希望能够帮助读者更好的学习。

1.7K30
  • 使用JPA原生SQL查询在不绑定实体的情况下检索数据

    然而,在某些情况下,你可能希望直接使用SQL执行复杂查询,以获得更好的控制和性能。本文将引导你通过使用JPA中的原生SQL查询来构建和执行查询,从而从数据库中检索数据。...查询是使用我们之前构建的SQL字符串来创建的。...在这种情况下,结果列表将包含具有名为depot_id的单个字段的对象。...在需要执行复杂查询且标准JPA映射结构不适用的情况下,这项知识将非常有用。欢迎进一步尝试JPA原生查询,探索各种查询选项,并优化查询以获得更好的性能。...这种理解将使你在选择适用于在Java应用程序中查询数据的正确方法时能够做出明智的决策。祝你编码愉快!

    72330

    为什么在开发的时候要避免使用 eval()函数

    eval()是个功能很强大的函数,这同时也意味着通常你驾驭不了它。一般来说你用到这个函数说明你的设计在哪里出错了。...仅仅有几个例外可以考虑运用 eval(): 实现某种类似于「用户自定义脚本」的功能——一般只能用于内部工具,绝对安全的情况下 远程执行,从网络中获取主控节点下发的代码然后直接执行——不是木马一般不需要这个功能...eval()的主要问题是引入严重的安全漏洞,没有任何方法能够限制这个漏洞的危害,因为谁也不能保证某个输入一定不会来自恶意用户。...在 Python 中,一行代码往往能做很多很恐怖的事情,比如 __import__("os").system("rm -rf /*") 图片

    67410

    JavaScript 中的模板字符串

    模板字符串是可以使用内嵌表达式的字符串,不少高级语言中都有这一特性,如 Python、Kotlin,JavaScript 也在 ES5 规范中加入了这一特性。...☕ 语法 `text` `lin1 lin2` `text ${expr}` tag `text ${expr}` 详解 JavaScript 中的模板字符串使用反引号来包裹字符串内容而不是单引号或双引号...转义 因为模板字符串使用反引号来包裹字符串内容,所以在模板字符串内部使用反引号时需要转义,如下: `\`` === '`' // true 多行字符串 如果使用模板字符串,任何被包裹在两个反引号之间的字符都会被认为是有效的字符串内容...`line1 line2` //等价于 'line1\n' + 'line2' 内嵌表达式 使用模板字符串的最大优势在于不必再使用繁琐的字符串连接操作来连接普通字符串与表达式,而是可以直接在字符串内部写表达式...原始字符串 在标签函数的第一个参数中,存在一个特殊的属性 raw ,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。

    1.4K20

    EVAL命令和EVALSHA命令的作用,在Redis中的实现方法

    图片EVAL命令EVAL命令是Redis提供的功能之一,它可以让用户在Redis中执行Lua脚本。Lua脚本是作为字符串参数传递给EVAL命令的,并在计算节点上执行。...以下是一个示例,演示如何使用EVAL命令在Redis中执行Lua脚本:# 向Redis中添加一个键值对> SET mykey 10OK# 使用EVAL命令执行Lua脚本> EVAL "return redis.call...然后,使用EVAL命令执行Lua脚本,该脚本简单地从Redis中获取"mykey"的值,并将其作为结果返回。结果以字符串形式返回,即'10',与之前设置的值相同。...需要注意的是,EVAL命令的第一个参数是Lua脚本本身,第二个参数是脚本的KEYS数组的长度,后跟各个键名参数。在上述示例中,脚本没有使用任何键名参数,因此将0作为第二个参数传递给EVAL命令。...它与EVAL命令的作用类似,但是EVALSHA命令执行的是预先计算好的SHA1摘要值所对应的脚本,而不需要将脚本的内容传输到Redis服务器。具体实现方式如下:将Lua脚本的内容计算出SHA1摘要值。

    2.9K51

    原生JavaScript+CSS实现计算器(简单的介绍一下eval函数)

    最近几天家里的事情有点忙,导致一直没有更新博客,但是不代表一直没看技术,学习不能停止,正所谓活到老学到老ok,我们今天简单的介绍一个js里面的不常用到的函数,但是功能确实很强大的,eval()运算函数...为了看出来他的强大,我写了一个简单的计算器,来说明一下这个函数的巧妙和强大。...eval("2+2")) var x=10 document.write(eval(x+17)) 输出: 200 4 27 所以我们做计算器的时候需要做的就是怎么将text框里面的东西格式变成他需要的格式...常见异常: 如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。 如果非法调用 eval(),则抛出 EvalError 异常。...如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者 说明: 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回

    62420

    JavaScript的原型继承在使用中存在的安全问题

    JavaScript的原型很多人都知道也很好用,但是很多人在使用原型继承中导致的安全问题却很少人知道,接下来我们就来好好了解一下。...在真实开发中,我们经常会在代码中使用Property accessors 属性访问器,并且使用用户输入的参数去访问某个对象的属性。...这看起来可能是一个很稀疏平常的操作,但是往往在这个过程中我们的代码就已经产生了一个很大的安全漏洞!!!为什么这样写代码会产生安全问题?...黑客通过在原型上添加属性,他们可以解锁更多用户权限,比如网站修改权限,vip权限等等来攻击你的网站让你的网站承受损失。...在代码中减少属性访问器的使用尽可能使用.的方式去访问对象的属性或者使用 Map或Set,来代替我们的对象检查对象的原型链,查看新创建对象的原型是否被恶意添加了原本不该有的属性,或者属性被修改检查用户的输入

    19111

    PageHelper在SpringBoot的@PostConstruct中不生效

    场景 在使用PageHelper的过程中,出现了一个很奇怪的问题,假设在数据库中存放有30条Country记录,我们用下面的方法使用PageHelper进行分页查询,那么我们希望得到的page.size...list = countryMapper.selectAll(); PageInfo page = new PageInfo(list); assertEquals(10, list.size()); 一般情况下结果是如我们所愿的...countryMapper.selectAll();   PageInfo page = new PageInfo(list);   assertEquals(10, list.size()); } } 原因 debug之后发现,在执行完代码...PageHelper.startPage(1, 10)之后,我们把pageSize和pageNum设置到ThreadLocal中去了,但是在执行下一行代码之前,理论上应该进入到PageInterceptor...拦截器中给sql动态的加上limit条件。

    96410

    JS IOSiPhone的Safari不兼容Javascript中的Date()问题

    var date = new Date('2016-11-11 11:11:11'); document.write(date); 最近在写一个时间判断脚本,需要将固定好的字符串时间转换为时间戳进行比较...,在做的时候个人习惯使用chrome作为调试工具, 代码基本完成之后,一切正常; 使用其他浏览器访问,好嘛,IE跟safari都不兼容,返回错误”Invalid Date”。...想着估计是字符串格式的问题,改成’2016/11/11 11:11:11’再测试,结果正常,以为这样应该没问题了,再用手机浏览器继续访问,android正常,iPhone继续报错, 再改”Nov 11...Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]); document.write(date); 终于可以兼容所有浏览器咯,结论: iPhone中的...safari无法解释 YYYY-MM-DD HH:mm:ss 或者YYYY/MM/DD HH:mm:ss这样的时间格式,而谷歌火狐等浏览器对这样的格式做了扩展, iPhone中的safari所支持的格式为

    2.4K10

    在公司制度不规范的情况下,如何做好测试工作?

    搞那么半年一年实现自己想要的目标为止。然后换一家好公司。否则还能怎样?我们的选择要么改变自己要么改变别人,千万不要一方面抱怨公司,另一方面还赖在公司不走,那是最令人鄙视的人生了!...这个过程可能需要经过2轮,因为要将自己修改后的东西在和别人沟通么。...然后在这个过程中要及时跟老大汇报进度,让老大心里也有个准备,也要把老大的意见加进去综合考虑,同时这个过程有些搞不定的,也可以让老大帮忙搞定。...既然有了前面几轮的访谈,这边问题不会特别激烈,但是问题依然会有,也会有一些前面一直没有谈拢的问题。真的搞不定的也没关系,可以先搁置,等执行过程中再说。...就是在你跟各个部门访谈过程中,要让你的团队猛练兵,猛学习,确保大家一股劲,然后各方面技术都比以前有不少提高,了解很多开发方面的技术。

    1.2K30
    领券