2014-06-27 7 views
20

Javascript kitabımda okuyordum ve bu iki ifade arasındaki farktan bahsediyordu.eval(), bir string nesnesini ilkel bir dize değerinden farklı nasıl değerlendirir?

var s = "hello world"; // A primitive string value 
var S = new String("hello world"); // A String object 

Fark ama (küçük bir yan not gibi) de bahsedilen kitapları eval() Bunların farklı işleyeceğini ama nasıl söz etmedi anlıyoruz.

Bir google'a bakmayı denedim ve hiçbir şey bulamadım. Bu yüzden example.com adresine gidin ve bununla uğraşmaya başladım. Onların ele alınış biçiminde bir fark göremedim.

Soruma soru: eval() yöntemi bunları nasıl farklı şekilde ele alıyor? MDN itibaren

+0

? Bir alıntı da verebilir. –

cevap

29

: eval kullanırken

String ilkel ve String objeler de farklı sonuçlar ver. eval'a aktarılan primitifler kaynak kod olarak kabul edilir; String nesnesi, nesnesini döndürerek diğer tüm nesneler gibi ele alınır. Örneğin:

s1 = "2 + 2";    // creates a string primitive 
s2 = new String("2 + 2"); // creates a String object 
console.log(eval(s1));  // returns the number 4 
console.log(eval(s2));  // returns the string "2 + 2" 
+0

Bu şimdi mantıklı. Hızlı ve basit yanıt için teşekkürler. Yanıtı mümkün olduğunca çabuk kabul edeceğim. –

+0

Yardım edebildiğimize sevindim! –

14

bu düşünün: okumakta Hangi kitabı

str = "alert('foo')"; 
obj = new String("alert('foo')"); 

eval(str); // produces an alert popup with 'foo' in it 
eval(obj); // returns "alert('foo')" as a string 


str = "arglebargle"; 
obj = new String('arglebargle'); 

eval(str); // reference error: arglebargle is not defined 
eval(obj); // string: "arglebargle" 
+0

Bu cevap için teşekkürler. Diğer cevabı ilk olarak gördüm ve kabul ettim ama bu benim konsept anlayışımı da ekledi. –

İlgili konular