2011-05-11 101 views
2
<script type="text/javascript"> 
var X = { 
    a: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}], 
    b: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}], 
    c: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}], 
    d: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}] 


} 

var str = JSON.stringify(X); 
alert(str); 


</script> 

這個對象有什麼問題?它警告「未捕獲的ReferenceError:john未定義」 怎麼回事?JS object undefined problem

+9

約翰需要加引號,因爲它是一個字符串不是一個變量標識符 – meouw 2011-05-11 12:12:42

+3

@meouw,您應該已經是一個答案,而不是評論+ 1個 – rsplak 2011-05-11 12:14:01

回答

8

你需要引用約翰。否則,它指的是尚未創建的變量/對象:john先前定義

var X = { 
    a: [{name:"john", phone:777},{name:"john", phone:777},{name:"john", phone:777}] 
... 

你的代碼是有效的:

var john = "john"; 
var X = { 
    a: [{name:john, phone:777},{name:john, phone:777},{name:john, phone:777}] 
    ... 

現在john代表着字符串「約翰變量「,而JSON是有效的。

+0

+1你的解釋也很大(和很好的例子) – kapa 2011-05-11 12:18:24

5

嘗試name: 'john',你希望它是一個字符串。

如果您只是編寫john,它將被解釋爲查找名爲john的變量(可能包括函數)。由於它找不到具有該名稱的變量,因此會說它沒有被定義。

如果該值可能類似於123-456-78(將被解釋爲123減去456減78),那麼將與phone一致。如果只能有數字,那麼您的解決方案就像現在一樣好,否則使用'123-456-78'

0

改變X如下。對象屬性名稱應該是單引號或雙引號。字符串值也應該引用。

var X = { 
    a: [{"name":"john", "phone":777},{"name":"john", "phone":777},{"name":"john", "phone":777}], 
... 
}; 
+0

'對象屬性既可以作爲普通字符也可以作爲字符串.' - 來自[Javascript Garden](http://bonsaiden.github.com/JavaScript-Garden/#object.general)。所以'名稱:'約翰'是完全正確的。 – kapa 2011-05-11 12:21:21