第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

什么時(shí)候JavaScript的eval()不是邪惡的?

什么時(shí)候JavaScript的eval()不是邪惡的?

什么時(shí)候JavaScript的eval()不是邪惡的?我正在編寫一些JavaScript代碼來解析用戶輸入的函數(shù)(用于類似電子表格的功能)。解析了公式后,我可以將其轉(zhuǎn)換為JavaScript并eval()在其上運(yùn)行以產(chǎn)生結(jié)果。但是,eval()如果我可以避免它,我總是回避使用,因?yàn)樗切皭旱模ǘ?,無論是對(duì)還是錯(cuò),我一直認(rèn)為它在JavaScript中更加邪惡,因?yàn)橐u(píng)估的代碼可能會(huì)被用戶改變)。那么,什么時(shí)候可以使用它?
查看完整描述

4 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

我想花一點(diǎn)時(shí)間來解決你的問題的前提 - eval()是“ 邪惡的 ”。編程語言人使用的“ 邪惡 ” 一詞通常意味著“危險(xiǎn)”,或者更準(zhǔn)確地說“能夠通過簡單的命令造成大量傷害”。那么,什么時(shí)候可以使用危險(xiǎn)的東西呢?當(dāng)您知道危險(xiǎn)是什么時(shí),以及何時(shí)采取適當(dāng)?shù)念A(yù)防措施。

至關(guān)重點(diǎn),我們來看看使用eval()的危險(xiǎn)性??赡艽嬖谠S多小的隱患,就像其他一切一樣,但兩個(gè)大的風(fēng)險(xiǎn) - eval()被認(rèn)為是邪惡的原因 - 是性能和代碼注入。

  • 性能 - eval()運(yùn)行解釋器/編譯器。如果你的代碼是編譯的,那么這是一個(gè)很大的問題,因?yàn)槟阈枰谶\(yùn)行時(shí)調(diào)用一個(gè)可能很重的編譯器。但是,JavaScript仍然主要是一種解釋語言,這意味著在一般情況下調(diào)用eval()并不是一個(gè)很大的性能影響(但請(qǐng)參閱下面的具體說明)。

  • 代碼注入 - eval()可能在提升的權(quán)限下運(yùn)行一串代碼。例如,以管理員/ root身份運(yùn)行的程序永遠(yuǎn)不會(huì)想要eval()用戶輸入,因?yàn)樵撦斎肟赡苁恰皉m -rf / etc / important-file”或更糟。同樣,瀏覽器中的JavaScript沒有這個(gè)問題,因?yàn)槌绦驘o論如何都在用戶自己的帳戶中運(yùn)行。服務(wù)器端JavaScript可能存在這個(gè)問題。

根據(jù)您的具體情況而定。根據(jù)我的理解,你自己生成字符串,所以假設(shè)你小心不要生成像“rm -rf something-important”這樣的字符串,那么就沒有代碼注入的風(fēng)險(xiǎn)(但請(qǐng)記住,它非常非常在一般情況下很難確保這一點(diǎn))。此外,如果你在瀏覽器中運(yùn)行,那么代碼注入是一個(gè)非常小的風(fēng)險(xiǎn),我相信。

至于性能,你將不得不重視編碼的簡易性。我認(rèn)為,如果你正在解析公式,你也可以在解析期間計(jì)算結(jié)果,而不是運(yùn)行另一個(gè)解析器(eval()中的一個(gè))。但是使用eval()進(jìn)行編碼可能更容易,并且性能損失可能不明顯。看起來eval()在這種情況下并不比任何其他可以節(jié)省你一些時(shí)間的函數(shù)更邪惡。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊

eval()不是邪惡的?;蛘?,如果是這樣,那就像反射,文件/網(wǎng)絡(luò)I / O,線程和IPC在其他語言中是“邪惡的”一樣是邪惡的。

如果出于您的目的,eval()比手動(dòng)解釋更快,或者使您的代碼更簡單或更清晰......那么您應(yīng)該使用它。如果不是,那么你不應(yīng)該。就那么簡單。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

當(dāng)你信任來源時(shí)。

在JSON的情況下,它或多或少難以篡改源,因?yàn)樗鼇碜阅刂频腤eb服務(wù)器。只要JSON本身不包含用戶上傳的數(shù)據(jù),使用eval就沒有重大缺陷。

在所有其他情況下,我會(huì)竭盡全力確保用戶提供的數(shù)據(jù)符合我的規(guī)則,然后再將其提供給eval()。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

讓我們真正的人:

  1. 現(xiàn)在每個(gè)主要的瀏覽器都有一個(gè)內(nèi)置的控制臺(tái),你可能會(huì)被黑客大量使用來調(diào)用任何有價(jià)值的函數(shù) - 為什么他們會(huì)費(fèi)心去使用eval語句 - 即使它們可以?

  2. 如果編譯2000行JavaScript需要0.2秒,如果我評(píng)估四行JSON,我的性能會(huì)下降嗎?

即使是克羅克福德對(duì)“eval is evil”的解釋也很薄弱。

eval是Evil,eval函數(shù)是JavaScript最被誤用的功能。躲開它

正如克羅克福德本人可能會(huì)說的那樣“這種說法往往會(huì)產(chǎn)生非理性的神經(jīng)癥。不要買它?!?/p>

了解eval并了解它何時(shí)可能有用更為重要。例如,eval是評(píng)估軟件生成的服務(wù)器響應(yīng)的合理工具。

BTW:Prototype.js直接調(diào)用eval五次(包括evalJSON()和evalResponse())。jQuery在parseJSON中使用它(通過Function構(gòu)造函數(shù))。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
  • 4 回答
  • 0 關(guān)注
  • 797 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)