3 回答

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

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
從測試來看
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);
}));
我們還可以通過本地人進(jìn)行評估表達(dá)。

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