Подтвердить что ты не робот

Как eval() обрабатывает строковый объект иначе, чем примитивное строковое значение?

Я читал в своей Javascript книге, и речь шла о различии между этими двумя утверждениями.

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

Я понимаю разницу, но в книге также упоминается (как маленькая заметка), что eval() будет обрабатывать эти по-разному, но не упоминал, как это сделать.

Я попытался оглянуться на google и не смог найти ничего, поэтому я хочу example.com и начал общаться с ним. Я не видел различий в том, как они обрабатываются.

Мой вопрос: Как метод eval() обрабатывает их по-другому?

4b9b3361

Ответ 1

Из 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"

Ответ 2

Рассмотрим это:

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"