我知道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,如评论中所述。

09-26 13:39