我可以在JavaScript中获得任意语句的“值”(例如eval,但没有eval)

时间:2010-03-17 00:17:12

标签: javascript eval

在JavaScript中,有一种方法可以像function() { return eval("if (true) { 1 }"); }返回“1”一样获取语句的“值”;

function() { return if (true) { 1 } }以及我尝试的所有类似排列都不是有效的语法。

eval是否有幸拥有特殊权力来确定表达式中语句的“最后”值?

用例是一个REPL,它评估任意表达式并返回结果。 eval有效,但我想把它包装在功能中。

3 个答案:

答案 0 :(得分:1)

function(expr) { return eval(expr); }

但是,除了eval之外,这真的没有做任何事情,所以我猜你必须要在返回之前使用eval的返回值做事情吗?

E.g:

function custom_eval(expr) 
{
  var result = eval(expr);
  if ((typeof result))=="string")
  { 
     alert("The expression returned a string value of: " + result); 
  }
  if ((typeof result))=="number")
  {
     alert("The expression returned a number with value: " + result);
  }
  //and so on and so forth...
  return result;
 }

 var bob = custom_eval("x=\"bob\";x");
 alert(bob);

(有关typeof运营商的详情)

答案 1 :(得分:1)

要评估javascript中的任意javascript代码,您有三个选项

  • EVAL。这通常被认为是“危险的”,但由于javascript在客户端的计算机上执行,它们只会伤害自己(除非您为客户提供共享代码的方式)。
  • Function构造函数。同样的问题也适用。
  • 写一个javascript解释器。对于“任意”代码来说,这绝对是棘手的。

答案 2 :(得分:0)

您可以使用 || 来获取第一个值,该值不为null / undefined / 0:

var t = 1 || 'b' || 3 || 'd'; // assigns 1

var t = 0 || null || undefined || 'd'; // assigns d

如果没有首先发现短路null / undefined / 0,您可以使用&& 来获取 last 值:

var t = 1 && 'b' && 3 && 'd'; // assigns d

var t = 0 && null && undefined && 'd'; // assigns 0