2012-04-10 59 views
0

我想知道什麼是錯用下面的JavaScript代碼 -爲什麼eval不在這個片段中工作?

<html> 
<script type="text/javascript"> 

var p = eval('new { "Color":"Red"}'); 

alert(p.Color); 
</script> 
</html> 

這是給我的JavaScript錯誤的 -

Message: Object doesn't support this action 
Line: 4 
Char: 1 
Code: 0 
+2

不回答你的問題,但爲什麼不:var p = {「Color」:「Red」}'? – 2012-04-10 09:35:05

+0

你想達到什麼目的?爲什麼'var p = {「Color」:「Red」}'不夠好? – 2012-04-10 09:41:11

+0

@ Kolink-該代碼將從服務器端編碼嵌入並且是動態的。 – 2012-04-10 10:10:53

回答

3

代碼有幾個問題;

首先你要告訴腳本創建新的東西,但是你沒有告訴它要創建什麼。如果你沒有創建一個自定義對象,您創建了一個對象的對象,所以你需要告訴它:

var p = eval('new Object()'); 

現在你正在創建一個新的Object對象,你可以配置Color屬性:

var p = eval('new Object({"Color":"Red"})'); 

Here is a working fiddle

但是,你爲什麼使用eval擺在首位? eval is evil

1

爲什麼EVAL在這個片段中不工作?

因爲不能將new operator [MDN]與對象一起使用,只能使用函數。

{"Color":"Red"}被評估爲對象字面值而不是函數。

如果要解析JSON,請使用JSON.parse[MDN]。另見JSON.parse vs. eval()

或者直接創建對象文本,如果是靜態的:

var p = {"Color":"Red"}; 

,使其與evalwhich you should avoid to use anyway)工作,除去new,敷字面括號:

var p = eval('({"Color":"Red"})'); 

The parenthesis are necessary因爲否則JavaScript會將{"Color":"Red"}評估爲並拋出一個錯誤。