问题描述
我正在处理一个 html/js 项目,我试图从我的 html 脚本中提取两个字符串,将它们发送到 js 并以类似于 typeof
的方式将它们解析为它们的变量类型.例如,"true"
最终会变成 boolean
,"Infinity"
会变成 number
,"[]"
会变成 object
,等等。我已经非常接近我正在寻找的结果,但是我已经达到了我的代码中的一部分,其中一组变量 typeof
通常会很好地解析,如果你抛出它们(不是作为字符串) .尽管它们没有被正确解析。另一个示例:如果您执行 return typeof console.log;
,它将返回 function
。但是,在我当前的代码中,要解析的更“不常见”的变量是 null
和 undefined
。
这是我编写的用于解析字符串的 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>
这是我已经创建的表,但这是我要使用此代码获得的结果:
这就是我的桌子不断出来的方式:
我已经在这方面工作了一段时间,但我再次陷入困境并且不确定如何进一步推进,尽管我仍在积极研究它。
解决方法
您的代码在 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 + "\"")
源代码:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
var valueB2 = Function("return " + c)();