首页
学习
活动
专区
工具
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中的字符串。它们提供了一种安全且可控的方式来执行动态生成的代码。

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

相关·内容

盘点JavaScriptEval函数使用方法

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

1.6K30

Linux破坏磁盘情况下使用dd命令

当然,可以使用tar甚至scp来复制整个文件系统,办法就是从一台计算机复制文件,然后将它们原封不动地粘贴到另一台计算机上新安装Linux。...即使dd命令输错哪怕一个字符,都会立即永久地清除整个驱动器宝贵数据。是的,确保输入无误很重要。 切记:在按下回车键调用dd之前,务必要考虑清楚!...你已插入了空驱动器(理想情况下容量与/dev/sda系统一样大)。...你还可以专注于驱动器单个分区。下一个例子执行该操作,还使用bs设置一次复制字节数(本例是4096个字节)。...本文中,if=对应你想要恢复镜像,of=对应你想要写入镜像目标驱动器: # dd if=sdadisk.img of=/dev/sdb 还可以一个命令同时执行创建操作和复制操作。

7.3K42

使用JPA原生SQL查询绑定实体情况下检索数据

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

48330

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

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

62310

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摘要值。

1K51

原生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 参数不是原始字符串,那么该方法将不作任何改变地返回

59620

JavaScript转义字符串引号

定义一个字符串必须要用单引号或双引号来包裹它。 那么当你字符串里面包含引号 " 或者 ' 时该怎么办呢? JavaScript ,可以通过引号前面使用反斜杠(\)来转义引号。...JavaScript 字符串可以使用开始和结束都是同类型单引号或双引号表示。 与其他一些编程语言不同是,单引号和双引号功能在 JavaScript 是相同。...常见场景比如在字符串包含对话句子需要用引号包裹。 另外比如在一个包含有  标签字符串,标签属性值需要用引号包裹。...; 然而,如果你需要在其中使用外面的引号,这就成为一个问题。 记住,一个字符串开头和结尾处有相同引号。...要知道,字符串开头和结尾都有相同引号,如果在中间使用了相同引号,字符串会提前中止并抛出错误。

5.3K30

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

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

17711

PageHelperSpringBoot@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条件。

83710

JS IOSiPhoneSafari兼容JavascriptDate()问题

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这样时间格式,而谷歌火狐等浏览器对这样格式做了扩展, iPhonesafari所支持格式为

2.3K10

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

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

1.1K30
领券