2016-09-10 28 views
5

ifade değişken dize değeri dönüştürün durum gibi eğer ben bunu kullanmak böylece:i ifadeye bir dize değeri dönüştürmek için çalışıyorum JavaScript

var StringVal = '20 > 18 && "yes" == "yes"'; 

if(StringVal){ 

    .... 
} 

mümkün bunun için bana önermek için lütfen.

Teşekkür

+0

['eval'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/eval) bunu yapar, ya da büyük olasılıkla' İşlev 'eşdeğeridir. – Xotic750

+0

evet .. ama bu işe yaramayacak "evet" == "evet" ' –

+1

Bunu neden yapmanız gerekiyor? – Xotic750

cevap

6

Bir kullanıcı bir kaynaktan girdi almak genellikle güvenli olmadığı ve Değerlendirin, ancakkullanabilirsiniz 10 değerlendirme veya eval

var StringVal = '20 > 18 && "yes" == "yes"'; 
 
if (new Function('return (' + StringVal + ')')()) { 
 
    console.log('ok'); 
 
}

Are eval() and new Function() the same thing?

Güncelleme: Bunu gerçek kod örneği ile birlikte gerekli buluyoruz neden olarak sorunuzu daha fazla bilgi verebilir Daha sonra daha güvenli bir çözüm önerilebilir.

Daha: JSON2 yılında eval

https://github.com/douglascrockford/JSON-js/blob/master/json2.js#L491

JSON.parse kullanılır ama aynı zamanda eval çağrılmadan önce bazı sterilize yapılır göreceksiniz.

+0

Bu yöntemi kullanmayın! Bu tehlikeli ve gereksizdir. – spongessuck

+0

Bu OP sorusunu cevaplar ve genellikle güvenli bir şekilde yapılmadığını belirtir, oylamaların gereksiz olduğunu hissediyorum. – Xotic750

+0

Çünkü OP bu şekilde yapmamalı. OP, bunun için doğru yolu bilmez ve kötü uygulamaları teşvik edersiniz. – spongessuck

3

Bunu denemek fonksiyonu eval()

kullanabilirsiniz:

var StringVal = '20 > 18 && "yes" == "yes"'; 

if(eval(StringVal)){ 

    .... 
} 

diğer örnek:

var a = '1==3' 
var b = '1==1' 

console.log(eval(a)); 
// false 
console.log(eval(b)); 
// true 
2

eval'un metninizi bir ifade olarak doğrudan ayrıştırmayacağını unutmayın. {} bir nesne başlatıcı ifadesi olarak, bir blok olarak ayrıştırılır, çünkü bu

eval('{}'); // undefined 

.

Bir parantez içinde iç içe geçme gibi bir ifade olarak veya return ifadesiyle onu ayrıştırmaya zorlamanın birkaç yolu vardır. Bu yüzden

function evalExpr(expr) { 
 
    Function("return " + expr + ";"); 
 
    return eval("(" + expr + ")"); 
 
} 
 
console.log(evalExpr('{}')); // Object {} 
 
try { evalExpr('1),(2') } catch(err) { console.error(err); } // SyntaxError 
 
try { evalExpr('1;2') } catch(err) { console.error(err); } // SyntaxError

eval("(" + expr + ")") bir ifadesi olarak değerlendirir ve ifade sarma parantez kaçmak için geçersiz ) içermediğini önceden Function("return " + expr + ";") denetler kullanmak.

İlgili konular