Почему `eval` работает со строками? - PullRequest
3 голосов
/ 10 марта 2012

Я играл с eval и заметил, что он может оценивать не-строки в Chrome, Firefox и Opera:

eval(Array) === Array; // true
eval(this) === this;   // true
eval(4 * 3 / 2) === 6; // true

Это стандартное поведение? Это где-нибудь задокументировано? Я не могу найти упоминания о том, что eval принимает что-либо кроме строкового аргумента.

Если это не стандартное поведение, может ли кто-нибудь определить хост-среду, в которой это не работает?

1 Ответ

5 голосов
/ 10 марта 2012

Без строки код уже оценивается на более низком уровне, а именно до того, как он будет передан в eval (например, ваш последний оператор просто выполняет eval(6)).Это относится к любой функции;это то, как оценивается код JavaScript.eval не является магическим в этом смысле, потому что это «просто» функция, которая «просто» принимает аргумент.

Что eval должно возвращать, когда передаются выражения am, которые не являются строкой, как описано в1006 * спецификация :

1.Если тип (x) не является строкой, вернуть x.

...