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

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

使用eval將字符串轉(zhuǎn)換為函數(shù)是邪惡的嗎?

使用eval將字符串轉(zhuǎn)換為函數(shù)是邪惡的嗎?

回首憶惘然 2019-10-22 22:37:44
我聽過很多關(guān)于eval()的不同意見,并且不確定在這種情況下是否可以使用eval():假設(shè)我有一個(gè)這樣的對(duì)象:var bla = {blubb: function (callback) {       //GET some stuff via ajax       //call the callback    }}和這樣的字符串: var someString = "bla.blubb";評(píng)估字符串以調(diào)用函數(shù)(和回調(diào))是否有害?var callMe = eval(someString)callMe(function(){   alert('yay')!});
查看完整描述

3 回答

?
千巷貓影

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

我在eval()上聽到了很多不同的看法


eval 一般而言,它不是邪惡的,有它的應(yīng)用。


不確定是否可以在這種情況下使用eval()


不,這不行。使用簡單的括號(hào)符號(hào)成員運(yùn)算符有更好的解決方案。由于每天都這樣詢問,因此我可以在此處列出數(shù)百個(gè)重復(fù)項(xiàng)(僅是Google的前幾個(gè)結(jié)果):


以點(diǎn)表示法轉(zhuǎn)換字符串以獲取對(duì)象引用

將javascript點(diǎn)表示法對(duì)象轉(zhuǎn)換為嵌套對(duì)象

使用字符串鍵訪問嵌套的JavaScript對(duì)象

通過點(diǎn)語法字符串路徑訪問對(duì)象

將點(diǎn)表示法的JavaScript字符串轉(zhuǎn)換為對(duì)象引用

使用點(diǎn)符號(hào)字符串訪問對(duì)象的子屬性

通過Javascript中的keyPath訪問屬性?


查看完整回答
反對(duì) 回復(fù) 2019-10-22
?
holdtom

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

讓我們假設(shè)您的整個(gè)設(shè)計(jì)并非完全邪惡(只是一點(diǎn)點(diǎn))。


那將意味著您限制并指定您所擁有的someString。例如,它可能是您可以調(diào)用的對(duì)象及其函數(shù)的路徑,而無需任何參數(shù)(這使其危險(xiǎn)性大大降低),并且在上下文中是全局對(duì)象。


然后,很容易解析字符串并在不使用的情況下調(diào)用函數(shù)eval。這樣會(huì)更安全。例如 :


window.a = {b:{c:function(){console.log('here')}}};

var someString = "a.b.c";


var path = someString.split('.');

var f = window;

for (var i=0; i<path.length; i++) f = f[path[i]];

f.call(null);

一種改進(jìn)是修復(fù)根對(duì)象(而不是窗口),以避免任何類型的調(diào)用。


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

添加回答

舉報(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)