我能得到“价值”吗? JavaScript 中的任意语句(类似于 eval,但没有 eval)

发布于 2024-08-25 14:06:09 字数 295 浏览 1 评论 0原文

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

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

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

用例是一个 REPL,它计算任意表达式并返回结果。 eval 有效,但我想将它包装在函数中。

In JavaScript is there a way to get the "value" of a statement in the same way that function() { return eval("if (true) { 1 }"); } returns "1";

function() { return if (true) { 1 } } and all similar permutations I've tried are not valid syntax.

Is eval just blessed with special powers to determine the "last" value of a statement in an expression?

Use case is a REPL that evaluates arbitrary expressions and returns the result. eval works, but I want to wrap it in function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还在原地等你 2024-09-01 14:06:09
function(expr) { return eval(expr); }

但这实际上并没有比 eval 做更多的事情,所以我猜你一定想在返回 eval 的返回值之前对其进行一些操作?

例如:(

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 运算符的更多信息)

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

But that really doesn't do anything more than what eval does, so I'm guessing you must want to do things with the return value of eval before returning it?

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);

(More on the typeof operator)

女皇必胜 2024-09-01 14:06:09

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

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

To evaluate arbitrary javascript code in javascript you have three options

  • eval. This is usually considered as "dangerous", but since javascript is executed on the client's computer, they can only harm themselves (unless you provide clients with a way to share their codes).
  • Function constructor. The same concerns apply.
  • write a javascript interpreter. This is definitely tricky for "arbitrary" code.
伪装你 2024-09-01 14:06:09

您可以使用 || 获取不为 null/undefined/0 的 first 值:

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

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

您可以使用 && 获取如果首先没有找到短路 null/undefined/0,则为 最后 值:

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

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

You can use || to get the first value that isn't null/undefined/0:

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

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

You can use && to get the last value, if no short-circuiting null/undefined/0 is found first:

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

var t = 0 && null && undefined && 'd'; // assigns 0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文