eval()如何将字符串对象与原始字符串值区别对待?

时间:2014-06-27 18:23:34

标签: javascript

我正在阅读我的Javascript书,它正在谈论这两个陈述之间的区别。

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

我理解不同之处,但是本书也提到(就像一个小小的注释), eval()将处理不同的,但没有提到。

我试着环顾谷歌并且找不到任何东西,所以我想在example.com上开始乱搞它。我看不出它们的处理方式有所不同。

我的问题是: eval()方法如何区别对待这些?

2 个答案:

答案 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"