2012-03-10 5 views
3

私はevalで遊んで、それはクロム、FirefoxとOperaで非文字列を評価できることに気づいた。`eval`が非文字列で動作するのはなぜですか?

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

が、これは標準の動作ですか?それはどこに文書化されていますか?私はevalの言及が文字列引数以外のものを取ることを見つけることができません。

これは標準的な動作ではない場合、ではないホスト環境を識別できますか?

答えて

5

文字列がないと、コードは下位レベル、つまりevalに渡される前に評価されています(たとえば、最後の文はeval(6)となります)。それはどんな関数でもそうです。 JavaScriptコードが評価される方法です。 evalはその意味では魔法ではありません。なぜなら、それは単に「引数」を受け入れる関数であるためです。

1.(x)は文字列、xを返さない場合は、次の式は、文字列がthe specificationで説明されていないという渡されていたときに返す必要がありますどのようなeval

+0

ええ、私はそれを見つけました。私は「eval」がそのように働いていることは知らなかった。 –

+0

+1あなたは私にそれを打つ。また、xが文字列でない場合、単にxを返します。 – MMM

+0

実際にこのような* 'eval'を使用する理由はないと思いますか? –

関連する問題