从 javaScript 中的字符串解析变量类型

Parsing variable types from Strings in javaScript

我正在做一个 html/js 项目,我试图从我的 html 脚本中提取两个字符串,将它们发送到 js 并将它们解析为它们的变量类型方式类似于 typeof。例如,"true" 最终会变成 boolean"Infinity" 会变成 number"[]" 会变成 object,等等。我已经非常接近我正在寻找的结果但是我已经到达了我的代码中的一部分,其中一组变量 typeof 通常会很好地解析如果你扔掉它们(不是字符串) .尽管它们没有被正确解析。另一个例子:如果你做 return typeof console.log; 它会 return function。但是,在我当前的代码中,要解析的更多“不常见”变量会以 nullundefined.

的形式出现

这是我写的用来解析字符串的 Javascript:

function valueTypeWriter(a, b) {
    var value = a;
    var valueB = b;
    if (a == 'string') {
        value = ('"' + b + '"');
        valueB = (typeof b);
    }
    else if (a == 'notString'){
        value = b;
        valueB = valueTypeSplicer(b);
    }

    return [value, valueB];
}

function valueTypeSplicer(c) {
    var valueB2 = JSON.parse(c);
    // var valueB2 = c;
    if (Number.isInteger(valueB2) == true) {
        return "number";
    }
    else if ((typeof valueB2 === "undefined")  && (valueB2 !== null)) {
        return "undefined";
    }
    else if((typeof valueB2 === 'function') && (valueB2 !== null)) {
        return "function";
    }
    if((typeof valueB2 === "object") && (valueB2 !== null)) {
        return "object";
    }
    else if ((typeof valueB2 === "boolean")  && (valueB2 !== null)) {
        return "boolean";
    }
    else if (valueB2 !== null){
        return valueB2;
    }
}

这是 html 开始和结束过程的片段

<tr>
<script>value = valueTypeWriter("string", "");</script>
<td><script>document.write(value[0]);</script></td>
<td><script>document.write(value[1]);</script></td>
</tr>

这是我已经创建的 table,但这是我要使用此代码获得的结果:

这就是我的 table 不断出现的方式:

我已经在这方面工作了一段时间,但我又一次陷入困境,不确定如何进一步解决这个问题,尽管我仍在积极研究它。

您的代码对空类型抛出错误。 JSON.parse() 仅解析有效的 json 字符串。能匹配到的都是json.

中的有效类型

https://tc39.es/ecma262/#sec-json.parse

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

也就是说,json 字符串将不起作用:

JSON.parse('"document"') 
// variable string
JSON.parse("\""+ c + "\"")

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

var valueB2 =  Function("return " + c)();