我知道eval()
将JavaScript代码作为字符串执行,但是uneval()
对我来说似乎很奇怪。通过对深对象克隆的一种用途来判断,它似乎对代码进行了重新评估。例如:
let myObject = { nonsense: null };
var newObject = eval( uneval(myObject) );
// The above example deeply clones myObject in Mozilla Firefox
但是魔术是如何工作的呢?
uneval
是做什么的,允许这样的用途?更重要的是,其他用途是什么?由于无缝评估了评估的内容;真正的测试是,除了通过eval()
函数传递的内容之外,它是否还能对其他内容进行重新评估(或者在这种情况下,反之亦然)? 最佳答案
uneval
函数返回给定对象的源;而eval
函数则通过评估该源代码执行相反的操作。这样想,您得到一个对象的源,然后评估该源以得到相同的对象,只是在不同的内存区域。这是妈妈文档中一个很好的资源链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/uneval,如评论中所述。