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

问题描述

我正在处理一个 html/js 项目,我试图从我的 html 脚本中提取两个字符串,将它们发送到 js 并以类似于 typeof 的方式将它们解析为它们的变量类型.例如,"true" 最终会变成 boolean"Infinity" 会变成 number"[]" 会变成 object,等等。我已经非常接近我正在寻找的结果,但是我已经达到了我的代码中的一部分,其中一组变量 typeof 通常会很好地解析,如果你抛出它们(不是作为字符串) .尽管它们没有被正确解析。另一个示例:如果您执行 return typeof console.log;,它将返回 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>

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

wanted table

这就是我的桌子不断出来的方式:

current table

我已经在这方面工作了一段时间,但我再次陷入困境并且不确定如何进一步推进,尽管我仍在积极研究它。

解决方法

您的代码在 null 类型上引发错误。 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 + "\"")

enter image description here

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

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