3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
$eval而且$parse不要評(píng)估JavaScript;他們?cè)u(píng)估AngularJS 表達(dá)式。鏈接的文檔解釋了表達(dá)式和JavaScript之間的區(qū)別。
問(wèn):$ eval到底在做什么?為什么需要自己的小型解析語(yǔ)言?
從文檔:
表達(dá)式是類(lèi)似于JavaScript的代碼段,通常放置在諸如{{expression}}之類(lèi)的綁定中。表達(dá)式由$ parse服務(wù)處理。
這是一種類(lèi)似于JavaScript的迷你語(yǔ)言,它限制了您可以運(yùn)行的內(nèi)容(例如,除了三元運(yùn)算符之外,沒(méi)有控制流語(yǔ)句),并且增加了一些AngularJS的優(yōu)點(diǎn)(例如,過(guò)濾器)。
問(wèn):為什么不使用普通的舊javascript“ eval”?
因?yàn)樗鼘?shí)際上不是在評(píng)估JavaScript。正如文檔所說(shuō):
如果您確實(shí)想運(yùn)行任意JavaScript代碼,則應(yīng)將其設(shè)為控制器方法并調(diào)用該方法。如果要從JavaScript評(píng)估角度表達(dá)式,請(qǐng)使用$ eval()方法。
上面鏈接的文檔有更多信息。

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
從測(cè)試來(lái)看
it('should allow passing locals to the expression', inject(function($rootScope) {
expect($rootScope.$eval('a+1', {a: 2})).toBe(3);
$rootScope.$eval(function(scope, locals) {
scope.c = locals.b + 4;
}, {b: 3});
expect($rootScope.c).toBe(7);
}));
我們還可以通過(guò)本地人進(jìn)行評(píng)估表達(dá)。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為這里沒(méi)有回答原始問(wèn)題之一。我認(rèn)為不使用香草eval(),因?yàn)榻嵌葢?yīng)用程序?qū)o(wú)法像Chrome應(yīng)用程序一樣工作,這出于安全原因明顯阻止了eval()的使用。
- 3 回答
- 0 關(guān)注
- 938 瀏覽
添加回答
舉報(bào)