字符串如何转换成表达式运算

方式一

eval函数:接收一个参数s,如果s不是字符串,则直接返回s,否则执行s语句。如果s语句执行结果是一个值,则返回此值

eval("console.log(3);"); // 输出3 返回undefined
eval("1+3"); // 返回4

执行结果

注意:eval函数的作用域问题与安全问题

作用域问题:直接调用时,在局部环境执行,间接调用时,默认在全局环境执行

var a = 5, b = 6;
    function test() {
    var a = 3, b = 4;
            
    //直接调用,局部作用域
    console.log(eval('a + b')); // 输出7

    //间接调用,全局作用域
    var temp = eval;
    console.log(temp('a + b')); // 输出11
}
test();

执行
安全问题:eval函数会执行任意传递的字符串,当字符串参数未知或者是来自一个不信任的源时,避免使用

方式二

(new Function("return 1+1"))(); // 返回2

执行结果

注意:传参的处理方式
var obj = { name: "张三" }, key = "name", value = "李四";
console.log(obj); // {name:"张三"}
new Function('obj','key','value',`obj.${key}=value`(obj,key,value);
console.log(obj); // {name:"李四"}

使用模板字符串时,key需要加${},obj和value当作普通值处理

方式三

setTimeout函数:用来指定某个函数或某段代码,在多少毫秒之后执行

setTimeout("console.log(6);",500); // 输出6 返回定时器ID

执行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值