簡體   English   中英

用戶輸入的JavaScript eval與變量聲明

[英]User input JavaScript eval with variable declarations

作為家庭作業的一部分,我試圖實現一個JavaScript控制台,該控制台類似於瀏覽器環境中Firebug中可用的控制台。 根據我的選擇, eval()似乎是最簡單的方法。 但是,即使是非常基本的用戶輸入,我的代碼也會遇到一些問題。 例如:

var number = 5;

導致語法錯誤,而不僅僅是像Firebug中那樣評估為undefined 因此,我似乎根本無法在eval字符串中聲明變量。 如果我做一些更簡單的事情,例如:

3 + 4 * Math.PI

它可以正常工作。 我試圖找到一個在包含變量聲明的字符串上使用eval()的示例,但似乎找不到任何這樣做的示例。

我需要使用正則表達式完全解析用戶輸入,然后再將其編譯為eval()的新字符串嗎?

eval()可以將分號理解為換行符嗎? 我也找不到使用它們的人。

function runMiniFirebug() {
    var userInput = document.getElementById("user-input").value;
    try {
        var userOutput = eval('(' + userInput + ')');
        document.getElementById("js-output").innerHTML += '<p class="input">>>>' + userInput + '<p>';
        document.getElementById("js-output").innerHTML += '<p class="ouput">' + userOutput + '<p>';
    }
    catch(error) {
        document.getElementById("js-output").innerHTML += '<p class="input">>>>' + userInput + '<p>';
        document.getElementById("js-output").innerHTML += '<p class="error">' + error.message + '<p>';
    }
}

編輯:所以似乎添加的括號引起了錯誤。 這是我的講師幻燈片的一部分。 信息是否正確,或者我只是錯誤地解釋了信息?

用{...}分隔的字符串

–您必須添加額外的括號,以便JavaScript知道括號用於對象文字,而不是用於分隔語句。

•這樣做無濟於事,因此請定期添加括號

– var test2 =“ {firstname:'Jay',lastName:'Sahn'}”;

– var person = eval(“(” + test2 +“)”);

var userOutput = eval('(' + userInput + ')');

為什么用括號括起來? 這將創建語句

(var number = 5;)

這是無效的語法。

只需刪除'(' ++ ')'


至於您的編輯,那是指僅對單個表達式求值 var number = 5; 不是表達式,也不是alert(1 + 1); alert(2 + 2); alert(1 + 1); alert(2 + 2); 用括號括起來會導致錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM