我正在编写一些JavaScript代码来parsing用户input的函数(对于类似电子表格的function)。 parsing了公式之后,我可以将它转换成JavaScript并在其上运行eval()以产生结果。 但是,如果我可以避免使用eval() ,因为它是邪恶的(而且,无论正确还是错误,我一直认为它在JavaScript中更加邪恶,因为要评估的代码可能会改变由用户)。 那么,什么时候可以使用它?
我正在使用下面的类来轻松存储我的歌曲的数据。 class Song: """The class to store the details of each song""" attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals() 我觉得这比写出一个if/else块更具有可扩展性。 但是, eval似乎被认为是不好的做法,并且不安全。 如果是这样,谁能向我解释为什么,并给我一个更好的方式来定义上面的类?
eval函数是dynamic生成代码的一个强大而简单的方法,那么注意什么呢?