各位大大好,有問題想深究,我想不通所以來請教各位前輩
我試著做了一個計算機,最後的結果呈現,我是這樣寫的
final_result = makeDigital(eval(evaluation))
"^^^^"
display_result = final_result
主要是說,evaluation是字串,用eval進行運算後,就可以丟出來了
跟我前輩討論的結果,eval這個函數是禁用,我去找eval的替代用法
其中一個是這樣:
row_1 function new_eval(a) {
row_2 var func = Function;
row_3 return new func('return ' + a)();
}
我不是很能理解這個想法,然後我有試著去在下面這些點拆解
function new_eval(a){
let func = Function;
console.log("func:" + typeof func)
b = "return " + a
console.log("b:" + typeof b + ":" + b)
c= new func(b)()
console.log("c:" + typeof c + ":" + c)
}
拆完了以後,結果是長這樣:
func:function
b:string:return 9+6*23
c:number:147
我的想法有以下幾個:
如果要認真做的話,應該要把字串解析為運算符號跟數字
再按照優先次序計算出結果
實作中可以把中序式改成後序式來處理
我很早以前寫的:函數繪製
可以參考裡面的 function_ana.js
這有解析使用者輸入的字串計算出函數值
使用範例
<input type="text" id="eq">
<input type="button" value="計算" id="btn">
<script src="function_ana.js"></script>
<script>
document.querySelector('#btn').addEventListener('click', () => {
let str = document.querySelector('#eq').value;
let funcObj = new FSA(str);
alert(funcObj.f(1)); //計算 f(1) 並顯示
});
</script>
淺水員
謝謝前輩!!