2010-10-24 12 views
10

Zaman değerlendirme nesnelerini çalıştırabilmesi gereken bir hata ayıklama çerçevesinin bir parçasına sahibim.javascript eval ve nesne değerlendirmesi

Özellikle, bu "{a: 1, b:2}" gibi bir dizem varsa, bu değerlerle a ve b arasındaki bir nesneye değerlendirmeniz gerekir. Ancak, eval("{a: 1, b:2}") yaparsam, bunu bir ifade olarak değerlendirir ve yasa dışı bir etiket hakkında bir şeyler söyler.

böyle değerlendirir, böylece onu kesmek var: iş gibi görünüyor, ama korkunç bir kesmek gibi görünüyor

eval("var x=" + str + "; x;"); 

. Bunu daha iyi nasıl yapacağınıza dair herhangi bir öneriniz var mı?

(BTW, eval tehlikelerin farkında değilim, ama bu gerçek kullanıcılar tarafından görülmeyecek bir hata ayıklama çerçevenin bir parçasıdır.)

+3

Bkz: http://stackoverflow.com/questions/3360356/why-the-open-quote-and-bracket-for-eval-jsonstring-when-parsing-json – CMS

cevap

20

Bunu olarak ayrıştırmak için () kullanarak bunu yapabilirsiniz böyle bir nesne yerine bir açıklamada,: tarayıcı destekliyorsa

eval("(" + str + ")"); 

olsa, sen JSON.parse() ilk kullanmalıdır.

+1

JSON.parse() ile çalışmaz. Geçerli JSON olmadıkları için açıklanan örnekler. Örneğin, geçerli JSON tüm özellik adlarını çift tırnak içine alır. – PleaseStand

+1

@idealmachine - evet siz de aynısınız ... aynı zamanda bunu kullanmak niyetindeyim, neden * ilk etapta geçerli JSON kullanıyorsunuz? Bu örnekte, kullanıcının nesne işaretlemesini ayarlaması gerekecek. –

+0

Veya JavaScript nesne gösteriminden JSON'a (örneğin, tırnak işaretleri) dönüştürmek için bir işlev yazın. Yapması kolay bir şey. – cdiggins