JavaScript将字符串解析为等效对象

JavaScript resolve string to equivalent object

本文关键字:对象 字符串 JavaScript      更新时间:2023-09-26

我正在编写一个JavaScript实用程序,它允许用户检测特定对象/函数在运行时是否可用。这是源代码,这是有效的,但每次你想测试另一个对象时都需要编辑:

<!DOCTYPE html>
<html>
    <head>
        <title>HTML5 Template</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('#TestObject').click(function() {
                    alert(typeof(HTMLCollection));
                });
            });
        </script>
    </head>
    <body>
        <input id="ObjectType" type="text" />
        <input id="TestObject" type="button" value="Test" />
    </body>
</html>

单击该按钮时,如果项目存在,则会显示一个警告,指示"对象"或"功能",如果不存在,则显示"未定义"。

我想要的是有一个文本框<input id="ObjectType" type="text" />,我可以在其中键入要测试的对象,然后单击按钮进行测试,这将消除继续编辑文档的需要。这可能吗?有什么类似于反射的东西我可以使用吗?

这是可能的,因为JavaScript对象属性实际上是关联键值对,这意味着obj.property等效于obj['property']

将此应用于您的问题,以下代码将起作用:

alert(typeof(window[$('#ObjectType').val()]));

这是因为所有"全局"变量实际上都是window对象的属性。

您可以通过执行window[className]从字符串类名中获取对象。我们将通过从输入文本框中获取类名的字符串值,从类名中获取对象,并对其调用typeof来使用它:

保持代码不变,只需将alert(typeof(HTMLCollection));替换为alert(typeof(window[$("#ObjectType").val()]));