我有下面的代碼位如何將字符串轉換爲Javascript中可執行的代碼行?
console.log("I am");
var x = "console.log('Alive!')";
現在我只希望使用x
執行分配給它的代碼串 - 我可能甚至不知道X例如價值,但只是想不管它可能執行它 - 這可能嗎?
我有下面的代碼位如何將字符串轉換爲Javascript中可執行的代碼行?
console.log("I am");
var x = "console.log('Alive!')";
現在我只希望使用x
執行分配給它的代碼串 - 我可能甚至不知道X例如價值,但只是想不管它可能執行它 - 這可能嗎?
什麼你正在尋找被稱爲功能:
function x() {
console.log('Alive!');
}
如果x
已經是一個字符串含你可以使用eval(x)
來執行它的代碼。 eval
雖然是邪惡的。
你在找什麼是eval()
。通過將字符串傳遞給此函數,您將評估字符串爲JavaScript代碼,並且它將返回字符串中代碼返回的任何返回值。
雖然使用此功能時請注意。您不想評估任何您不知道可以安全執行的代碼。例如,運行用戶生成的代碼可能會搞亂你正在做的任何事情。在網站上使用JavaScript時,這可能只會導致客戶端出現問題,因此可能不會帶來很大的安全威脅,因此在評估服務器端的代碼時,您會非常小心。
正如在其他文章中暗示的那樣,如果您要控制要運行的源代碼,您可能希望製作一個函數而不是一個評估字符串。
感謝大家的回覆,這就是我一直在尋找的。現在的問題是Im執行使用document.write的腳本的內容並覆蓋整個網頁。我該如何解決這個問題,只需將元素附加到html文檔中,而不是完全覆蓋其他所有內容?這是一個完全不同的topi,但感謝您的幫助,關注我的問題! –
是的,這確實是一個全新的話題,但這裏是對你的問題的一個快速解釋: 'document.write'將總是清除頁面,並在文檔完全加載後執行時創建一個新文件。因此,您需要使用'innerHTML'來代替。用'document.getElementById()'來獲取你想要編輯內容的元素,並執行'element.innerHTML =「output」'。 –
@AndreasHagen:如果頁面上沒有DOM節點,那麼'document.writeln'只寫一行,而不清除整個頁面 –
var x = "console.log('Alive!')";
eval(x)
eval()這會將字符串轉換爲javascript代碼。
eval("console.log('Alive!')";);
啊,我記得EDI。 – clintgh