網(wǎng)頁(yè)設(shè)計(jì)作業(yè)報(bào)告范文成都網(wǎng)站優(yōu)化
?eval函數(shù)的定義:
eval() 函數(shù)計(jì)算 JavaScript 字符串,并把它作為腳本代碼來(lái)執(zhí)行。
如果參數(shù)是一個(gè)表達(dá)式,eval() 函數(shù)將執(zhí)行表達(dá)式。如果參數(shù)是Javascript語(yǔ)句,eval()將執(zhí)行 Javascript 語(yǔ)句。
let a1 = 10;
let a2 = 20;
let calculate1 = 'a1 + a2';
console.log(eval(calculate1)) // 30
這個(gè)一眼就看到eval函數(shù)是將字符串中的值作為js代碼來(lái)運(yùn)行了,所以得出來(lái)是30。
但是如果表達(dá)式是后端傳遞給我們的,并且參與運(yùn)算的是 對(duì)象類型那么就需要將后端傳遞給我們的字符串先轉(zhuǎn)變?yōu)槟0遄址?#xff0c;也就是兩邊增加一個(gè)? ``??此時(shí)在運(yùn)行的時(shí)候他只會(huì)將${}中的值解析出來(lái),就停止運(yùn)算了,需要再調(diào)用一次eval 來(lái)進(jìn)一步運(yùn)算就能得到想要的值了
下邊這種做法是當(dāng)計(jì)算的是對(duì)象中的屬性值并且運(yùn)算方法是后端定義的的時(shí)候的用法
let obj1 = {num1:30,num2:40
}
let calculate2 = '${obj1.num1} + ${obj1.num2}';
//先將字符串轉(zhuǎn)變?yōu)槟0遄址?calculate2 = '`' + calculate2 + '`'
console.log(eval(calculate2)) // 30 + 40
//此時(shí)只是將js表達(dá)式運(yùn)行出來(lái)了,并沒(méi)有將做下一步運(yùn)算,我們重新再調(diào)用一次 eval函數(shù)
let sum = eval(calculate2) // 70