"1+2+3"
gibi bir dize ifadem var ve bir dize olarak kalmalıdır. Diğer bir deyişle, işlemi gerçekleştirmek için rakamları döngülemek ve yayınlamak bir seçenek değildir, bu yüzden benim çözümüm eval("1+2+3")
. Ancak eval()
yavaş ve onunla ilgili tüm bu sorunlara sahip. Dizgemi değerlendirmek için bir alternatif var mı?Bu ifade için bir eval() alternatifi var mı?
0
A
cevap
2
Bir dizgiyi değerlendirmek yalnızca yavaş değil, tehlikeli. Ya da, kötü niyetli bir kullanıcı niyet veya hatası ile, programınızı çökerten, kodunuzu değerlendiren ve verilerinizi yok eden bir güvenlik açığı açarsanız ne olur?
Hayır, dizeyi eval()
yapmamalısınız. Bölünmeli, işlenenleri sayılara ayırmalı ve özetlemelisiniz.
Sen (siz dize ihtiyacı olduğunu söyledi) isterseniz etrafında string
tutmak, ama aslında bu işlem bir Gerçekten Kötü Fikir olduğunu gerçekleştirmek için string
kullanarak yapabilirsiniz.
var string = "1+2+3"
var numbers = string.split('+').map(function(x) { return parseInt(x) })
var sum = numbers.reduce(function(total, x) { return total + x }, 0)
0
Bu saçma bir soru:
var reducer = function (a, b) {
return +a + +b;
};
"1+2+3".match(/[+-]?\d+/g).reduce(reducer); // 6
// or addition only
"1+2+3".split(/\D/).reduce(reducer); // 6
İlgili konular
- 1. "pass" dışında bir neat alternatifi var mı?
- 2. Meteor Minimongo'da $ operatör alternatifi var mı?
- 3. HazırJPD içinde alternatif alternatifi var mı?
- 4. Bu düzenli ifade bir istisna atar mı?
- 5. Alt etki alanlarında çalışan modern bir sessionStorage alternatifi var mı?
- 6. Enzimatik bölünme için düzenli bir ifade var mı?
- 7. Birden çok AND operatörü kullanmanın bir alternatifi var mı?
- 8. Rails için standart bir düzenli ifade doğrulayıcısı var mı?
- 9. php işlevine bir Coldfusion alternatifi var openssl_verify()?
- 10. php kullanarak matematik denklemleri yapmak için eval() yöntemleri için alternatifler
- 11. "Bu" için sezgisel ve kapanır tamam mı? (İfade ağaçları)
- 12. Windows için getSystemLoadAverage() alternatifi?
- 13. Bu işlev için normal ifade
- 14. C'nin "memcmp" e yerel C++ alternatifi var mı?
- 15. eval()
- 16. Eval
- 17. Dreamweaver için WebDav kullanan herhangi bir açık kaynak alternatifi var mı?
- 18. Visual Studio'da Delphi'nin ActionManager alternatifi var
- 19. Bu C# kodunda yazım denetimi için bir alternatif var mı?
- 20. $ - Bu her yerde önlemek için bir yolu var mı?
- 21. Bu bellek hatasını önlemek için bir yol var mı?
- 22. Bu sorunu çözmek için mysql'de analitik bir işlev var mı?
- 23. Bu html'de bir sorun var mı?
- 24. Windsor'daki bu akıcı kaydı ifade etmenin daha iyi bir yolu var mı?
- 25. Go'da bu JS ifadesinin bir karşılığı var mı?
- 26. android webapps için WebView alternatifi
- 27. Bu TPL deyim var mı?
- 28. Python bir eval işlevini kaydetme
- 29. warning 10: Bu ifade,
- 30. JArchitect'e alternatif var mı?
bu ifade girdi olarak, "1", "2" ve "3", örneğin alarak inşa edilebilir mi? –
Cesaretiniz varsa kendi çözümleyicinizi yazabilir veya [NPM] (http://npmjs.com) üzerinde sizin için bir şeyler bulabilirsiniz. 'eval' yavaş değil. Bu sadece ** sorun **. – tadman
Dizenin bölümlerini sayılara dönüştürebilir ve çeviremezseniz, başka bir seçenek yoktur, ancak buradaki değerlendirmeler de budur, – adeneo