Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不需要评估就可以实现吗?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 不需要评估就可以实现吗?

Javascript 不需要评估就可以实现吗?,javascript,javascript-objects,Javascript,Javascript Objects,我有这样的代码,它可以工作: function getSomeValue(property) { var obj = { lvl1: { lvl2: { lvl3: 'hi' } } }; //Is it ok to use eval? return eval('obj.' + property); } //I would like to return

我有这样的代码,它可以工作:

function getSomeValue(property) {
    var obj = {
        lvl1: {
            lvl2: {
                lvl3: 'hi'
            }
        }
    };
    //Is it ok to use eval?
    return eval('obj.' + property);
}

//I would like to return the value of obj.lvl1.lvl2.lvl3 
getSomeValue("lvl1.lvl2.lvl3");

这是我第一次觉得有必要使用eval。eval是邪恶的吗?有没有其他快速的方法来实现这一点?

我个人认为这很好,因为你将可以评估的内容限制在obj中

当您在远程服务器上运行从AJAX调用派生的代码或其他一些外部脚本时,使用eval是不好的。另外,这里没有窗口对象的更改或操作,所以我看不出问题所在


假设您将代码作为字符串传递,您必须质疑是否需要这样做,以及它为您的应用程序提供了什么价值。但是我想,如果你想的话,为什么不呢。

我个人认为这很好,因为你把可以评估的限制在obj中

当您在远程服务器上运行从AJAX调用派生的代码或其他一些外部脚本时,使用eval是不好的。另外,这里没有窗口对象的更改或操作,所以我看不出问题所在

假设您将代码作为字符串传递,您必须质疑是否需要这样做,以及它为您的应用程序提供了什么价值。但是我想,如果你想,为什么不呢。

你不必使用eval,例如:

函数getSomeValueproperty{ var obj={ 一级:{ 第二层:{ lvl3:“你好” } } }, arr=property.split'; 返回arr.reduceFunction A、b{ 返回a[b]; },obj; } document.writegetSomeValuelvl1.lvl2.lvl3 您不必使用eval,例如:

函数getSomeValueproperty{ var obj={ 一级:{ 第二层:{ lvl3:“你好” } } }, arr=property.split'; 返回arr.reduceFunction A、b{ 返回a[b]; },obj; }
document.writegetSomeValuelvl1.lvl2.lvl3;是的,这里有一个变量可以实现这一点:是的,这里有一个变量可以实现这一点:但是如果getSomeValue的参数不是常量,并且来自不受信任的源,攻击者可以传递foo;提醒haxxor和boom。它们可以在本地机器上运行,但对它们没有多大好处。除非他们破解了服务器密码。但无论如何,游戏结束了,他们有完全的控制权。可能是来自某个数据库的东西。让我们假设,例如,由于某种原因,堆栈溢出评估了您的配置文件的内容。然后,您可以将JS代码添加到您的信息字段中,任何查看您的个人资料的人都会被击中。也许,尽管在这种情况下,您希望JS转义所有数据库输出。各种框架和插件都使用eval来读取属性,例如我在require.js中看到了eval。但如果getSomeValue的参数不是常量,并且来自不受信任的源,则攻击者可以传递foo;提醒haxxor和boom。它们可以在本地机器上运行,但对它们没有多大好处。除非他们破解了服务器密码。但无论如何,游戏结束了,他们有完全的控制权。可能是来自某个数据库的东西。让我们假设,例如,由于某种原因,堆栈溢出评估了您的配置文件的内容。然后,您可以将JS代码添加到您的信息字段中,任何查看您的个人资料的人都会被击中。也许,尽管在这种情况下,您希望JS转义所有数据库输出。各种框架和插件都使用eval来读取属性,例如我在require.js中看到了eval。只是在远程代码可以被评估的情况下,这是一个解决问题的聪明方法,谢谢。是的,这真的很好。。。我刚才说的可能是真的,但这样更好。这是解决问题的一个聪明方法,谢谢。是的,这真的很好。。。我说的可能是真的,但这样更好。