Как eval() обрабатывает строковый объект иначе, чем примитивное строковое значение?
Я читал в своей Javascript книге, и речь шла о различии между этими двумя утверждениями.
var s = "hello world"; // A primitive string value
var S = new String("hello world"); // A String object
Я понимаю разницу, но в книге также упоминается (как маленькая заметка), что eval() будет обрабатывать эти по-разному, но не упоминал, как это сделать.
Я попытался оглянуться на google и не смог найти ничего, поэтому я хочу example.com и начал общаться с ним. Я не видел различий в том, как они обрабатываются.
Мой вопрос: Как метод eval() обрабатывает их по-другому?
Ответы
Ответ 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"