我正在阅读我的Javascript书,它正在谈论这两个陈述之间的区别。
var s = "hello world"; // A primitive string value
var S = new String("hello world"); // A String object
我理解不同之处,但是本书也提到(就像一个小小的注释), eval()将处理不同的,但没有提到。
我试着环顾谷歌并且找不到任何东西,所以我想在example.com上开始乱搞它。我看不出它们的处理方式有所不同。
我的问题是: eval()方法如何区别对待这些?
答案 0 :(得分:29)
来自MDN:
String
原语和String
对象也会产生不同的结果
使用eval
时。传递给eval
的基元被视为源代码;
通过返回,String
个对象被视为所有其他对象
宾语。例如:
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"
答案 1 :(得分:14)
考虑一下:
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"