使用特定字符串调用JavaScript函数

Calling JavaScript function using specific string

本文关键字:调用 JavaScript 函数 字符串      更新时间:2023-09-26

是否可以使用特定字符串执行JavaScript函数?

我正在通过编程一个后缀符号计算器来学习JavaScript。

示例:如果我写我的输入框"5!",我希望执行factorial(5),或者如果我写3nCr5,执行ncr(3,5)等。

因为你的目标是学习Javascript,你用Javascript执行字符串解析的方式是使用正则表达式,顺便说一下,它在整个Javascript世界中是一个单独的主题。

例如,"5!"转换为factorial(5)可以通过以下操作实现:

var result ="5!".replace(/(['d]+)(!)/g,
   function(match,number,functionType){ 
     if (functionType === "!"){
         return parseInt(number) *2; // perform your math operation here!
     }
  });
console.log(result);

Mozilla Developer网站有很多有用的文档,可以指导您了解这个和其他主题。在上面的链接中,你会发现一个使用RegEx将华氏度转换为等效的摄氏度的例子,这似乎与你正在尝试的没有太大不同。

关于上面使用的正则表达式( /(['d]+)(!)/g ),它可以读作:

['d]+ 匹配后面跟着 !

希望这对你有帮助!

是的,尽管对于初学者JS来说相当复杂。正则表达式是一个非常强大的工具,但我不建议初学者使用,因为它们看起来很痛苦!实际上,你必须考虑一些问题。对于初学者来说,分隔符是必要的,它可以更容易地分离各个部分并准确地读取单个函数。一个简单的空间就可以了。

然后你可以将这些部分分割成一个数组,并通过检测函数和变量的解释器函数来循环这些部分。

让你前进的东西:

var stack = Array(); /* Stack array for calculation */
var result; /* output init */
/* get string from HTML element */
var foostring = document.getElementById("htmlelementID").value; /*  "5 !"  */
/* split string into array using space as the separator */
var fooarray = foostring.split(" "); /* ["5","!"] */
while(i<fooarray.length) 
{
    /*calculation loop */
        if(!isNaN(fooarray[i])) /* input is number, add to stack */
        {
            stack.push(Number(fooarray[i]); /* make sure we convert from string to number before storing */
        }
        else /*input is function, pop required variables from stack and calculate*/
        {
            switch(fooarray[i])
            {
                case "!":
                    var input = stack.pop();
                    var sum = factorial(input);
                    stack.push(sum);
                    break;
                default:
                    console.log("Syntax Error! "+fooarray[i]);
                    return;
            }
        }
        i++;
}
if(stack.length === 1) 
{
    alert("Result: " + stack.pop());
}
else
{
    console.log("Syntax Error! Too many items on stack at complete");
}
/* math functions */
function factorial (n) {
  if (n == 0 || n == 1)
    return 1;
  if (f[n] > 0)
    return f[n];
  return f[n] = factorial(n-1) * n;
} 

我对后缀知之甚少,这是基于伪算法@ http://en.wikipedia.org/wiki/Reverse_Polish_notation

功能上看起来是正确的,但没有经过测试。您将需要用所需的所有其他功能扩展开关箱,但请注意我放入的示例箱的布局!使用stack pop从堆栈中删除变量,使用stack push将结果添加回堆栈,并且不要忘记在每个case结束时使用break。

欢迎来到JS!div =)